迷失之钥
首页
视频
文章
捐赠
登陆
注册
跨平台Golang GUI - GoVCL -简介
作者:不在乎y
发表时间:2020年05月01日
### 初衷 ##### 项目的起源 GoVCL(中文全称:Go语言可视化组件库;英文全称:Go Language Visual Component Library)项目最初来源于自己的gofmx实验项目,当初做gofmx项目遇到了些问题,后来不知道怎么的就放弃了。时隔8个多月后想起来试试移植VCL,一开始并没有打算做完整的,只是实验下,偶然间解决了之前做gofmx的遇到的问题,然后就一发不可收拾,捡起以前gofmx的生成器改为govcl的,一路也不是这么顺畅,踩坑很多。慢慢的随着各种需求又加入了基于LCL组件的跨平台方案、独立的GOVCL UI设计器等。从项目发布到现已经一年多了,涵盖了Delphi VCL/Lazarus LCL大部分的标准组件, 完善度也越来越高。 依靠Delphi/Lazarus这两棵大树使得govcl变得简单易用,稳定性也不差(`2.0版本后将不再支持Delphi/VCL了`)。 ---- ##### 项目的现状态 因为基本上没有进行推广,知名度太低, 除了最开始在OSC上发了些后就很少再发过相关,一直都默默的更新,也懒得去做宣传了。 ---- ##### 为什么要自己做 现在开源的go UI库也不少,自己也尝试简单使用过go-qt、lxn/walk、andlabs/ui、go-sciter等,但都不如意,缺失的太多。有些处在停止更新,有些二进制依赖太多太臃肿、有些组件太少、有些非原生、有些不易使用等等各种问题。基于这些原因我决定自己造个轮子。govcl的目标为 `简单 + 小巧 + 原生`。 ---- ##### 学习govcl是否需要懂Pascal语言? **不需要懂Pascal语言**,仅仅只需要了解控件的使用方法和相关的属性及事件之类的。**除非你需要修改libvcl或者liblcl的源代码才会涉及到Pascal语言。** ---- ##### 优/缺点 * 优点 UI库小,用UPX压缩下也就1M-2M大小的,无依赖,简单,特别是加上使用可视化的设计器或者res2go工具能快速生成UI,免去了手动创建的烦恼。控件多,属性多,事件多,对于一些工具开发足以。 * 缺点 因为UI库全是原生组件,那么要做到像DirectUI那样的就是很麻烦的事了,所以这算是govcl现在的一大遗憾吧。一些比较简单的美化界面还是相对容易做到。 ---- ##### 其他 **现Release中提供了一些各个平台的预编译的二进制,主要是用来测试的(正式请自己编译)。** * 二进制包括:liblcl-win32、liblcl-win64、liblcl-linux64、liblcl-macOS64-cocoa。 至于为什么没有linux-32、linux-arm主要是不想折腾编译环境了,想要的可以自己解决。<br /> * 原本govcl是基于Delphi VCL库的,没有跨平台一说。但后来有人需求,所以就研究了下借助Lazarus LCL来填补这个空缺。因为Lazarus LCL并不是100%兼容Delphi的VCL库,所以在相关的组件、方法、函数、事件上有所缺失,部分我已经手动做了兼容补丁,能补多少算多少,补不了的也没办法了。 ---- ##### Go版本建议 `当前开发基于go1.9.2版本,从govcl 1.2.0开始,最低只支持go1.9。 v1.2.0之前的已测在go1.5也可编译运行` **另外由于govcl项目太大已经不适合使用go 32位的编译器了编译代码了,建议使用go 64位的编译器编译,否则在编译的时候就容易造成内存溢出。** **govcl主要代码已经达到13万多行,例程差不多3万行,libvcl+liblcl+res2go约20多万行。** ---- ##### 已测试的各个系统平台情况 | 系统 | 已经测试系统版本|说明| | :------: | :------ | ------ | | Windows | Windows XP、Windows7、Window10 |目前只对Windows Vista之上系统比较友好,对Windows XP<br />有些问题。<br />主要是因为uxtheme.dll引起的,相关解决方法见[FAQ](https://gitee.com/ying32/govcl/wikis/pages?sort_id=410059&doc_id=102420)中的| | Linux | Ubuntu 16.04、Linux Mint 17.1、Linux Mint 19、Deepin 15.5 || | MacOS | macOS 10.12、10.13 | 注:从macOS 10.14后不再支持32位应用,Lazarus从2.0开始已经转向cocoa库了,目前使用的还算可以。 | | Raspberry pi | | 使用CodeTyphon交叉编译为arm格式。<br />暂发现Menu组件有问题,其他似乎没啥大问题 | ---- ### 重要提醒 * 生命周期 **所有对象都为`手动管理`,`没有GC`, `没有引用计数`。详情参考“[LCL对象生命周期](https://gitee.com/ying32/govcl/wikis/pages?sort_id=2158465&doc_id=102420)”** * 线程/协程中访问 **所有UI组件都是`非`线程/协程安全的,当需要异步更新时,请使用[ThreadSync](https://gitee.com/ying32/govcl/wikis/pages?sort_id=976890&doc_id=102420)来同步显示到UI上。**
获取最新的本网站资讯
最新的文章和信息动态快速的了解
订阅资讯
立即注册,开始了解更多