forked from ying32/govcl
/
main.go
95 lines (79 loc) · 2.38 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"github.com/ying32/govcl/vcl"
"fmt"
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl/types"
"github.com/ying32/govcl/vcl/types/colors"
)
// 事件公用。啥叫事件公用呢,比如btn, btn2两个控件,处理的大部分是相同的,只是根据不同按钮处理进行不同的选择
func main() {
vcl.Application.Initialize()
vcl.Application.SetMainFormOnTaskBar(true)
mainForm := vcl.Application.CreateForm()
mainForm.SetCaption("事件公用演示")
mainForm.SetPosition(types.PoScreenCenter)
mainForm.EnabledMaximize(false)
mainForm.SetWidth(300)
mainForm.SetHeight(200)
btn := vcl.NewButton(mainForm)
btn.SetParent(mainForm)
btn.SetName("btn1")
btn.SetCaption("按钮1")
btn.SetTag(1)
btn.SetLeft(10)
btn.SetTop(50)
btn.SetOnClick(buttonOnClick)
btn2 := vcl.NewButton(mainForm)
btn2.SetParent(mainForm)
btn2.SetName("btn2")
btn2.SetCaption("按钮2")
btn2.SetTag(2)
btn2.SetLeft(10)
btn2.SetTop(90)
btn2.SetOnClick(buttonOnClick)
pnl1 := vcl.NewPanel(mainForm)
pnl1.SetParent(mainForm)
pnl1.SetBounds(150, 20, 60, 30)
pnl1.SetParentBackground(false)
pnl1.SetColor(colors.ClRed)
pnl1.SetOnMouseEnter(pnlOnMouseEnter)
pnl1.SetOnMouseLeave(pnlOnMouseLeave)
pnl2 := vcl.NewPanel(mainForm)
pnl2.SetParent(mainForm)
pnl2.SetBounds(150, pnl1.Top()+pnl1.Height()+5, 60, 30)
pnl2.SetParentBackground(false)
pnl2.SetColor(colors.ClGreen)
pnl2.SetOnMouseEnter(pnlOnMouseEnter)
pnl2.SetOnMouseLeave(pnlOnMouseLeave)
pnl3 := vcl.NewPanel(mainForm)
pnl3.SetParent(mainForm)
pnl3.SetBounds(150, pnl2.Top()+pnl2.Height()+5, 60, 30)
pnl3.SetParentBackground(false)
pnl3.SetColor(colors.ClBlue)
pnl3.SetOnMouseEnter(pnlOnMouseEnter)
pnl3.SetOnMouseLeave(pnlOnMouseLeave)
vcl.Application.Run()
}
// 两个按钮使用同一个事件回调,Delphi里称为方法(method)
func buttonOnClick(sender vcl.IObject) {
// 这里就可以根据sender去做选择了
btn := vcl.AsButton(sender)
switch btn.Tag() {
case 1:
fmt.Println("按钮1的")
case 2:
fmt.Println("按钮2的")
}
vcl.ShowMessage("消息,Caption:" + btn.Caption() + ", Name:" + btn.Name())
}
func pnlOnMouseEnter(sender vcl.IObject) {
fmt.Println("鼠标进入")
pnl := vcl.AsPanel(sender)
pnl.SetLeft(pnl.Left() + 10)
}
func pnlOnMouseLeave(sender vcl.IObject) {
fmt.Println("鼠标离开")
pnl := vcl.AsPanel(sender)
pnl.SetLeft(pnl.Left() - 10)
}