1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dxsoft-GVCL

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

GVCL

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()
}
Create Manifest 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, создайте файл, который будет включать этот манифест-ресурс для использования системных скинов.

Font использование

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Создание графического интерфейса для Windows на языке Go с целью реализации библиотеки, подобной интерфейсу Delphi VCL. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dxsoft-GVCL.git
git@api.gitlife.ru:oschina-mirror/dxsoft-GVCL.git
oschina-mirror
dxsoft-GVCL
dxsoft-GVCL
master