govcl

module
v1.2.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 20, 2020 License: Apache-2.0

README

一个跨平台的Golang GUI库,底层绑定自Delphi VCL和Lazarus LCL


从1.2.0版本开始govcl将最低要求go1.9。


license Minimum Go version screenshots Chinese Wiki Chinese Chat Update log Support govcl

Support Platform
注: linux和macOS由于底层使用了lcl库,则部分组件、属性和方法无效。

如果你想要支持linux arm及linux 32bit则需要自己编译对应的liblcl二进制。

预编译GUI库二进制下载:
Librarys
注:压缩包内包含的“libvcl”库二进制(libvcl.dll、libvclx64.dll)仅供预览和测试使用。正式使用请自行编译“libvcl”源代码,具体编译方法参考UILIbSrcources中的说明。

res2go工具下载(文档
res2go
注:用Delphi/Lazarus设计界面,用Golang写代码。

govcl扩展包
注:扩展包里面的inc或者pas文件需要自己放到libvcl/liblcl目录下编译。


使用方法

步骤一:获取govcl代码

go get github.com/ying32/govcl

步骤二:编写代码
  • 方法一(纯代码。不推荐方式):
package main

import (
   "github.com/ying32/govcl/vcl"
)

func main() {
    vcl.Application.Initialize()
    mainForm := vcl.Application.CreateForm()
    mainForm.SetCaption("Hello")
    mainForm.EnabledMaximize(false)
    mainForm.ScreenCenter()
    btn := vcl.NewButton(mainForm)
    btn.SetParent(mainForm)
    btn.SetCaption("Hello")
    btn.SetOnClick(func(sender vcl.IObject) {
        vcl.ShowMessage("Hello!")
    })
    vcl.Application.Run()
}
  • 方法二(纯代码,仿照Delphi类的方式,可自动绑定事件。):
package main


import (
   "github.com/ying32/govcl/vcl"
)

type TMainForm struct {
    *vcl.TForm
    Btn1     *vcl.TButton
}

type TAboutForm struct {
    *vcl.TForm
    Btn1    *vcl.TButton
}

var (
    mainForm *TMainForm
    aboutForm *TAboutForm
)

func main() {
    vcl.Application.Initialize()
    vcl.Application.SetMainFormOnTaskBar(true)
    vcl.Application.CreateForm(&mainForm)
    // 创建完后关联子组件事件
    vcl.Application.CreateForm(&aboutForm, true)
    vcl.Application.Run()
}

// -- TMainForm

func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
    f.SetCaption("Hello")
    f.Btn1 = vcl.NewButton(f)
    f.Btn1.SetParent(f)
    f.Btn1.SetBounds(10, 10, 88, 28)
    f.Btn1.SetCaption("Button1")
    f.Btn1.SetOnClick(f.OnButtonClick)  
}

func (f *TMainForm) OnButtonClick(sender vcl.IObject) {
    vcl.ShowMessage("Hello!")
}


// -- TAboutForm

func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
    f.SetCaption("Hello")
    f.Btn1 = vcl.NewButton(f)
    //f.Btn1.SetName("Btn1")
    f.Btn1.SetParent(f)
    f.Btn1.SetBounds(10, 10, 88, 28)
    f.Btn1.SetCaption("Button1")
}

func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
    vcl.ShowMessage("Hello!")
}

  • 方法三(使用Delphi/Lazarus或者GoVCLDesigner设计界面。推荐):
package main


import (
   "github.com/ying32/govcl/vcl"
)

type TMainForm struct {
    *vcl.TForm
    Btn1     *vcl.TButton
}

type TAboutForm struct {
    *vcl.TForm
    Btn1    *vcl.TButton
}

var (
    mainForm *TMainForm
    aboutForm *TAboutForm
)

func main() {
    vcl.Application.Initialize()
    vcl.Application.SetMainFormOnTaskBar(true)
    vcl.Application.CreateForm(mainFormBytes, &mainForm)
    vcl.Application.CreateForm("./about.gfm", &aboutForm)
    vcl.Application.Run()
}

// -- TMainForm

func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
    
}

func (f *TMainForm) OnBtn1Click(sender vcl.IObject) {
    vcl.ShowMessage("Hello!")
}

// -- TAboutForm

func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
 
}

func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
    vcl.ShowMessage("Hello!")
}

方法三需要配合UI设计器或者res2go工具使用。

步骤三:复制对应的二进制
  • Windows: 根据编译的二进制是32还是64位的,复制对应的"libvcl.dll"或者"libvclx64.dll"或者“liblcl.dll”到当前exe目录或系统环境路径下。

    • Go环境变量: GOARCH = amd64 386 GOOS = windows CGO_ENABLED=0
  • Linux: 复制"liblcl.so"可执行文件目录下(也可复制liblcl.so到/usr/lib/目录中,作为公共库使用)。

    • Go环境变量: GOARCH = amd64 GOOS = linux CGO_ENABLED=1
  • MacOS: 复制"liblcl.dylib"可执行文件目录下(MacOS下注意:需要自行创建info.plist文件),或者参考:MacOS上应用打包

    • Go环境变量: GOARCH = amd64 GOOS = darwin CGO_ENABLED=1

注意:

当使用"liblcl"库时,是以兼容"libvcl"库形式运行的,所以有部分组件和组件的方法、属性及事件不可用。


特别注意:所有UI组件都是非线程/协程安全的,当在goroutine中使用时,请使用vcl.ThreadSync来同步更新到UI上。

API文档

Directories

Path Synopsis
samples
SkinsharpTest
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
basicResForm
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑。
clock
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
comboboxEx
由res2go自动生成,不要编辑。
由res2go自动生成,不要编辑。
formEvents
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
gdiplustest
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
gdiplustest2
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
govcl
govcl project main.go go.exe build -i -ldflags="-H windowsgui"
govcl project main.go go.exe build -i -ldflags="-H windowsgui"
imageviewer
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
jsonTogo
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
jsonViewer
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
listviewadv1
由res2go自动生成,不要编辑。
由res2go自动生成,不要编辑。
listviewcustomdraw
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
login
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑
memloaddll
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑。
miniblinkWebview
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑 由GOVCL UI设计器自动生成,不要编辑
miniwebview
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
mp3Player
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
multilanguage
Automatically generated by the GOVCL UI designer, do not edit
Automatically generated by the GOVCL UI designer, do not edit
myext
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
notepad
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
pagecontrolwizard
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
registerHotKey
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
res2goTest/Delphi/gocode
由res2go自动生成,不要编辑。
由res2go自动生成,不要编辑。
res2goTest/Lazarus/gocode
由res2go自动生成,不要编辑。
由res2go自动生成,不要编辑。
res2goTest/Test/gocode
由res2go自动生成,不要编辑。
由res2go自动生成,不要编辑。
simplelibvlc
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
valuelisteditor
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
windowsspy
由GOVCL UI设计器自动生成,不要编辑
由GOVCL UI设计器自动生成,不要编辑
xunleidownloader
由GOVCL UI设计器自动生成,不要编辑。
由GOVCL UI设计器自动生成,不要编辑。
vcl
api
---------------------------------------- 加载文件或者内存中的窗口资源文件功能 需要配合窗口设计器使用 Copyright © ying32.
---------------------------------------- 加载文件或者内存中的窗口资源文件功能 需要配合窗口设计器使用 Copyright © ying32.
exts/skinh
skinsharp皮肤扩展接口 http://www.skinsharp.com/htdocs/index.htm skinsharp是收费的,这里只是头文件的导入。
skinsharp皮肤扩展接口 http://www.skinsharp.com/htdocs/index.htm skinsharp是收费的,这里只是头文件的导入。
rtl
win

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL