Golang Windows GUI Bindings Like Delphi VCL
Windows的GUI界面Go语言封装,目标是实现一个类似Delphi VCL版本效果的界面库
msgbox.go
type GForm1 struct {
controls.GForm
Button1 *controls.GButton
Edit1 *controls.GEdit
}
func NewForm1(app *controls.WApplication)*GForm1{
frm := new(GForm1)
frm.SubInit()
frm.Button1 = controls.NewButton(frm)
frm.Button1.SetWidth(80)
frm.Button1.SetHeight(30)
frm.Button1.SetLeft(frm.Width() - 90)
frm.Button1.SetTop(frm.Height() - 80)
frm.Button1.SetCaption("确定关闭")
frm.Edit1 = controls.NewEdit(frm)
frm.OnClose = func(sender interface{},closeAction *int8) {
*closeAction = controls.CAFree
}
frm.Button1.OnClick = func(sender interface{}) {
WinApi.MessageBox(frm.GetWindowHandle(),"sadf","Asdf",64)
frm.SetModalResult(controls.MrOK)
}
return frm
}
func main() {
app := new(controls.WApplication)
app.ShowMainForm = true
m := app.CreateForm()
m.SetLeft(200)
m.SetTop(50)
m.SetCaption("测试窗体")
e := controls.NewEdit(m)
e.SetName("Edit1")
e.SetLeft(10)
e.SetWidth(100)
e.SetHeight(20)
e.SetCaption("测试")
b := controls.NewButton(m)
b.SetDefault(true)
b.SetLeft(120)
b.SetCaption("创建窗体")
b.OnClick = func(sender interface{}) {
tmpm := NewForm1(app)
tmpm.SetCaption(e.GetText())
if tmpm.ShowModal() == controls.MrOK{
WinApi.MessageBox(tmpm.GetWindowHandle(),"程序确定退出","消息",64)
}
}
b1 := controls.NewButton(m)
b1.SetCaption("关闭")
b1.SetLeft(100)
b1.SetTop(40)
b1.OnClick = func(sender interface{}) {
b.SetVisible(!b.Visible())
b.SetCaption("测试")
}
app.Run()
}
test.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
</assembly>
Затем либо скомпилируйте манифест с помощью инструмента rsrc, например:
go get github.com/akavel/rsrc
rsrc -manifest test.manifest -o rsrc.syso
либо переименуйте файл test.manifest
в test.exe.manifest
и распространите его вместе с приложением.
Используя Go Build, создайте файл, который будет включать этот манифест-ресурс для использования системных скинов.
b1.Font.BeginUpdate()
b1.Font.SetSize(10)
b1.Font.Underline = 1
b1.Font.EndUpdate()
Использование метода меню
//Меню
pop := NVisbleControls.NewPopupMenu(m)
tmpitem := pop.Items().AddItem("Тест 1")
citem := tmpitem.AddItem("Подтест 1")
citem.OnClick = func(sender interface{}) {
WinApi.MessageBox(m.GetWindowHandle(), "Меню теста"+sender.(*NVisbleControls.GMenuItem).Caption(), "Сообщение", 64)
}
citem = pop.Items().AddItem("Тест 2")
citem.OnClick = func(sender interface{}) {
WinApi.MessageBox(m.GetWindowHandle(), "Меню теста"+sender.(*NVisbleControls.GMenuItem).Caption(), "Сообщение", 64)
}
m.PopupMenu = pop
В настоящее время общая структура компонентов уже имеет форму, и для добавления других компонентов библиотеки можно следовать расширению Button и Edit, а также Label. Следующим шагом будет завершение лотка и временное прекращение работы.
//Меню
pop := NVisbleControls.NewPopupMenu(m)
tmpitem := pop.Items().AddItem("Тест 1")
citem := tmpitem.AddItem("Подтест 1")
citem.OnClick = func(sender interface{}) {
WinApi.MessageBox(m.GetWindowHandle(), "Меню теста"+sender.(*NVisbleControls.GMenuItem).Caption(), "Сообщение", 64)
}
citem = pop.Items().AddItem("Тест 2")
citem.OnClick = func(sender interface{}) {
WinApi.MessageBox(m.GetWindowHandle(), "Меню теста"+sender.(*NVisbleControls.GMenuItem).Caption(), "Сообщение", 64)
}
//Компонент лотка, в сочетании с всплывающим меню
icon := NVisbleControls.NewTrayIcon(m)
icon.SetIcon(app.AppIcon()) //Установка иконки лотка ```
icon.SetIcon(WinApi.LoadIcon(controls.Hinstance,uintptr(5)))
icon.SetVisible(true)
icon.PopupMenu = pop //设置托盘的右键弹出菜д
icon.OnDblClick = func(sender interface{}) {
if !m.Visible(){
m.Show()
}else{
m.SetVisible(false)
}
}
reg := NVisbleControls.NewRegistry(0)
reg.SetRootKey(WinApi.HKEY_LOCAL_MACHINE)
if reg.OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",false){
if reg.ValueExists("SynTPEnh"){
WinApi.MessageBox(m.GetWindowHandle(),"SynTPEnh自动启动: "+reg.ReadString("SynTPEnh"),"消息",64)
}
WinApi.MessageBox(m.GetWindowHandle(),"打开注册表测试"+sender.(*NVisbleControls.GMenuItem).Caption(),"消息",6)
}
reg.Free()
Эффект выполнения
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )