GoVCL Go语言可视化组件库。
Github: https://github.com/ying32/govcl
官方网站:https://z-kit.cc/
文档做得不错https://gitee.com/ying32/govcl/wikis/pages
它需要下载支持库放在当前或库目录,当前V2.0.2。
跨平台支持Windows(目前只对Windows Vista之上系统比较友好,对Windows XP有些问题),Linux,macOS。arm和Linux32位系统的支持需要自己编译(库支持文件)
作者的重要提醒
生命周期: 所有对象都为手动管理,没有GC, 没有引用计数。详情参考“LCL对象生命周期”
线程/协程中访问: 所有UI组件都是非线程/协程安全的,当需要异步更新时,请使用ThreadSync来同步显示到UI上。
作者正在开发一个界面设计器,即在软件中拖动生成界面。虽然定为收费模式,值得观察。以前用微软系列的时候,界面直接拖动生成,减少大量的设计时间。
libvcl: libvcl基于Delphi 10.2.x版本制作,只能应用于Windows下,稳定性较好。
liblcl: liblcl基于Lazarus 2.0.x版本制作,可以用作跨平台,有些功能或者性能略低于libvcl。
最新下载的是liblcl。
简单看看HelloWorld
package main
import (
"fmt"
"github.com/ying32/govcl/vcl"
"github.com/ying32/govcl/vcl/types"
)
type TForm1 struct {
*vcl.TForm
Button1 *vcl.TButton
}
var form1 *TForm1
func main() {
vcl.Application.SetFormScaled(true) //设置全局窗口的Scaled
vcl.Application.SetIconResId(3)
vcl.Application.Initialize()
vcl.Application.SetMainFormOnTaskBar(true) //主窗口显示在任务栏上
mainForm := vcl.Application.CreateForm() //创建窗口
mainForm.SetCaption("哈喽") //设置窗口标题
mainForm.SetPosition(types.PoScreenCenter) //窗口居中
mainForm.EnabledMaximize(false) //禁止最大化
mainForm.SetWidth(600) //设置窗口大小
mainForm.SetHeight(400)
mainForm.SetOnCloseQuery(func(Sender vcl.IObject, CanClose *bool) {
//这里发生了错误,以后再分析
*CanClose = vcl.MessageDlg("是否退出?", types.MtConfirmation, types.MbYes, types.MbNo) == types.IdYes
})
vcl.Application.CreateForm(&form1, true) //用于按钮创建窗口
btn := vcl.NewButton(mainForm) //创建按钮
btn.SetParent(mainForm) //按钮父控制为主窗口
btn.SetCaption(" 建立窗口1 ") //按钮标签
btn.SetWidth(200)
btn.SetHeight(60)
btn.SetLeft(50) //按钮位置
btn.SetTop(50)
btn.SetOnClick(func(sender vcl.IObject) { //按钮点击事件
form1.Show()
})
vcl.Application.Run() //启动窗口
}
//子窗口创建事件
func (f *TForm1) OnFormCreate(sender vcl.IObject) {
fmt.Println("onCreate")
f.Button1 = vcl.NewButton(f) //创建一个按钮
fmt.Println("f.Button1:", f.Button1.Instance())
f.Button1.SetParent(f) //放置到子窗口上
//f.Button1.SetName("Button1")
f.Button1.SetCaption("我是按钮")
//f.Button1.SetOnClick(f.OnButton1Click)
//即使没有设置Button1的点击事件,下面的点击事件依然有效,似乎符合函数命名规定即有。
}
func (f *TForm1) OnButton1Click(object vcl.IObject) {
vcl.ShowMessage("Click")
}
主窗口上通过按钮建立一个子窗口。整体看起来还是不复杂。代码也有比较多的中文说明。
我的环境是Ubuntu20.04,基本一个一个的运行了演示程序,不少都出现了错误,不能完整运行。若演示都不能正常带入,没办法用了…失败!
2020.7.28
现在的版本是2.0.5
我总是动态的看待问题,对人也对事,都是不断变化的。如果它什么时候符合自身了,改善了,就是值是得重新审视的。
govcl的中文文档还是可以,要大家用,写好文档是关键。