gambas 的窗体(fmain)上好像不能显示文本
想找一个可视化的范例,控制台里数字1加到100,这些累加的太枯燥
gambas 有什么好的for循环范例?
- TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
- 联系:
- astolia
- 论坛版主
- 帖子: 6456
- 注册时间: 2008-09-18 13:11
Re: gambas 有什么好的for循环范例?
窗体上放一个button,一个textarea和一个label
代码: 全选
Public Sub Button1_Click()
Dim s, i As Integer
s = 0
For i = 1 To 100
s += i
TextArea1.Text &= i & " "
Label1.Text = s
Wait 0.1
Next
End
- TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
- 联系:
Re: gambas 有什么好的for循环范例?
谢谢,明天去学校试试,貌似for循环里的wait不起作用,在gambas3里
看wiki里有个生成9×9×9个textbox的范例,可是要用到数组,想改编成不用数组的9×9,对象名称如何递增,使用new时需要不同的名称: http://www.gambasdoc.org/help/lang/new?zh&v3
[thinbasic]
' 本例创建9*9*9个小文本框,可以通过公共的Object[]对象数组来访问它们。
PUBLIC bIsInitialised AS Boolean
PUBLIC objIsImpossible AS Object[]
PUBLIC SUB Form_Open()
DIM iR AS Integer
DIM iR2 AS Integer
DIM iC AS Integer
DIM iC2 AS Integer
DIM iDigit AS Integer
DIM iX AS Integer
DIM objTextBox AS TextBox
IF NOT bIsInitialised THEN
objIsImpossible = NEW Object[] ' 创建需要的数组
iX = 0
FOR iR = 0 TO 8
FOR iC = 0 TO 8
FOR iDigit = 0 TO 8
iR2 = iDigit MOD 3
iC2 = iDigit / 3
objTextBox = NEW TextBox(ME) ' 创建9*9*9个TextBox的下一个
objTextBox.X = (iR * 3 + iR2) * 12 + 2
objTextBox.y = (iC * 3 + iC2) * 12 + 2
objTextBox.Width = 10
objTextBox.Height = 10
objIsImpossible.Add(objTextBox, iX)
iX = iX + 1
NEXT ' iDigit
NEXT ' iC
NEXT ' iR
ENDIF
END
[/thinbasic]
看wiki里有个生成9×9×9个textbox的范例,可是要用到数组,想改编成不用数组的9×9,对象名称如何递增,使用new时需要不同的名称: http://www.gambasdoc.org/help/lang/new?zh&v3
[thinbasic]
' 本例创建9*9*9个小文本框,可以通过公共的Object[]对象数组来访问它们。
PUBLIC bIsInitialised AS Boolean
PUBLIC objIsImpossible AS Object[]
PUBLIC SUB Form_Open()
DIM iR AS Integer
DIM iR2 AS Integer
DIM iC AS Integer
DIM iC2 AS Integer
DIM iDigit AS Integer
DIM iX AS Integer
DIM objTextBox AS TextBox
IF NOT bIsInitialised THEN
objIsImpossible = NEW Object[] ' 创建需要的数组
iX = 0
FOR iR = 0 TO 8
FOR iC = 0 TO 8
FOR iDigit = 0 TO 8
iR2 = iDigit MOD 3
iC2 = iDigit / 3
objTextBox = NEW TextBox(ME) ' 创建9*9*9个TextBox的下一个
objTextBox.X = (iR * 3 + iR2) * 12 + 2
objTextBox.y = (iC * 3 + iC2) * 12 + 2
objTextBox.Width = 10
objTextBox.Height = 10
objIsImpossible.Add(objTextBox, iX)
iX = iX + 1
NEXT ' iDigit
NEXT ' iC
NEXT ' iR
ENDIF
END
[/thinbasic]
- astolia
- 论坛版主
- 帖子: 6456
- 注册时间: 2008-09-18 13:11
Re: gambas 有什么好的for循环范例?
wait有效的。在14.04中的gambas 3.1.1和15.04的3.5.4中都没问题
代码: 全选
Public Sub Form_Open()
Dim j, i As Integer
Dim btn As Button
For i = 1 To 9
For j = 1 To 9
btn = New Button(Me) As "btn"
btn.y = (j - 1) * 20
btn.x = (i - 1) * 30
btn.Width = 30
btn.height = 20
btn.name = "btn" & i & j
btn.Text = i & "-" & j
Next
Next
End
Public Sub btn_Click()
Message.Info(Last.name & " is clicked")
End
- TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
- 联系:
Re: gambas 有什么好的for循环范例?
试了下果然可以,多谢
我设想的是一个label1在窗体中不断的移动位置,代码放在form_open()里无效,放在label1_MouseDown()里,关闭时会在label1.x=i+1上提示“Invalid object in FMain:14.”,需要点停止按钮才行。
我设想的是一个label1在窗体中不断的移动位置,代码放在form_open()里无效,放在label1_MouseDown()里,关闭时会在label1.x=i+1上提示“Invalid object in FMain:14.”,需要点停止按钮才行。
代码: 全选
Dim i As Integer
For i = 1 To 300
Label1.x = i + 1
Label1.y = i + 1
Wait 0.2
Next
- astolia
- 论坛版主
- 帖子: 6456
- 注册时间: 2008-09-18 13:11
Re: gambas 有什么好的for循环范例?
1、在form_open()里并非无效,而是open事件是初始化完毕还没有显示出来,show事件才是窗口显示完毕。该放到form_show里TeliuTe 写了: 我设想的是一个label1在窗体中不断的移动位置,代码放在form_open()里无效,放在label1_MouseDown()里,关闭时会在label1.x=i+1上提示“Invalid object in FMain:14.”,需要点停止按钮才行。
2、Invalid object的问题,你可以在form_close里做个标记,在循环里一旦发现窗口已关闭就跳出
代码: 全选
Public closeFlag As Boolean
Public Sub Form_Open()
closeFlag = False
Print "Open()"
End
Public Sub Form_Show()
Dim i As Integer
For i = 1 To 300
If (closeFlag) Then
Break
Endif
Label1.x = i + 1
Label1.y = i + 1
Wait 0.2
Next
Print "Show()"
End
Public Sub Form_Close()
closeFlag = True
' 此时还存在
Label1.Text = "valid"
End
- TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
- 联系:
Re: gambas 有什么好的for循环范例?
在gambas2里试了下,点关闭按钮(X)时还是会提示错误,
-----------------------------
3.5里试了下,也报错,提示段错误:
3还没试,12.04里安装gambas3的ppa无法访问
代码: 全选
Cannot access PPA (https://launchpad.net/api/1.0/~nemh/+archive/gambas3) to get PPA information, please check your internet connection.
3.5里试了下,也报错,提示段错误:
代码: 全选
(ex2:2569): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkWindow'
(ex2:2569): Gtk-CRITICAL **: IA__gtk_window_get_type_hint: assertion `GTK_IS_WINDOW (window)' failed
- astolia
- 论坛版主
- 帖子: 6456
- 注册时间: 2008-09-18 13:11
Re: gambas 有什么好的for循环范例?
看了一下12.04源里的gambas2,确实会报那个错。应该是它在窗口销毁事件与显示事件前后关系的处理上出了问题。gambas2.x的最新版本是2.24.0,比源里的2.23.1略高,不知道还有没有这个问题。3.x是不会报错的
2.x里让显示事件尽早结束就不会出错了,可以把循环的部分放到按钮的点击事件中,或者像下面那样在timer事件中执行循环
gambas3稳定版的ppa源地址目前是 https://launchpad.net/~gambas-team/+arc ... tu/gambas3
2.x里让显示事件尽早结束就不会出错了,可以把循环的部分放到按钮的点击事件中,或者像下面那样在timer事件中执行循环
代码: 全选
PUBLIC t AS Timer
PUBLIC SUB Form_Show()
t = NEW Timer AS "MyTimer"
t.Delay = 1
t.Enabled = TRUE
END
PUBLIC SUB MyTimer_Timer()
DIM i AS Integer
FOR i = 1 TO 300
IF (closeFlag) THEN
BREAK
ENDIF
Label1.x = i + 1
Label1.y = i + 1
WAIT 0.2
NEXT
t.Stop
END
- TeliuTe
- 论坛版主
- 帖子: 7668
- 注册时间: 2007-11-25 13:29
- 系统: 16/18/20/w7
- 来自: 新疆博乐
- 联系:
Re: gambas 有什么好的for循环范例?
非常感谢,明天去3.5上试一试,定时器事件有些地方可以代替循环语句,
原来还有个稳定版的ppa,下回试一试,先存下
--------------------
楼上这个定时器的程序可以通过,关闭时正常退出
放在按钮或标签的点击事件里也都可以正常关闭退出
原来还有个稳定版的ppa,下回试一试,先存下
--------------------
楼上这个定时器的程序可以通过,关闭时正常退出
放在按钮或标签的点击事件里也都可以正常关闭退出