mirror of
https://gitee.com/energye/energy.git
synced 2024-11-30 02:37:46 +08:00
A: 增加 LCL 组件窗口可启用/禁用主窗口配置
This commit is contained in:
parent
4aaab92557
commit
1ef8330224
@ -108,6 +108,7 @@ func (m *TCEFApplication) DoMessageLoopWork() {
|
||||
}
|
||||
|
||||
// RunMessageLoop
|
||||
// Chrome runtime
|
||||
func (m *TCEFApplication) RunMessageLoop() {
|
||||
defer func() {
|
||||
logger.Debug("application run value loop end")
|
||||
|
@ -33,6 +33,8 @@ var (
|
||||
},
|
||||
windowInfo: make(map[int32]IBrowserWindow),
|
||||
}
|
||||
// disabledMainWindow 如果在Config配置中禁用主窗口(EnableMainWindow=false)时, 使用该窗口替代主窗口
|
||||
disabledMainWindow *disableMainWindow
|
||||
browserProcessStartAfterCallback browserProcessStartAfterCallbackFunc
|
||||
)
|
||||
|
||||
@ -86,17 +88,8 @@ func Run(app *TCEFApplication) {
|
||||
// VF窗口 MessageLoop
|
||||
application.RunMessageLoop()
|
||||
} else {
|
||||
// 创建LCL窗口组件
|
||||
if BrowserWindow.mainBrowserWindow == nil {
|
||||
BrowserWindow.mainBrowserWindow = new(lclBrowserWindow)
|
||||
}
|
||||
// LCL窗口
|
||||
//lcl.RunApp(&BrowserWindow.mainBrowserWindow)
|
||||
|
||||
lcl.Application.Initialize()
|
||||
lcl.Application.SetMainFormOnTaskBar(BrowserWindow.Config.MainFormOnTaskBar)
|
||||
lcl.Application.CreateForm(&BrowserWindow.mainBrowserWindow, true)
|
||||
lcl.Application.Run()
|
||||
// LCL窗口 创建并运行应用
|
||||
BrowserWindow.createFormAndRun()
|
||||
//lclwidget.CustomWidgetSetFinalization()
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,38 @@ type lclBrowserWindow struct {
|
||||
LCLBrowserWindow
|
||||
}
|
||||
|
||||
// disableMainWindow
|
||||
// 禁用主窗口使用该窗口结构做为主窗口, 该窗口不被显示
|
||||
type disableMainWindow struct {
|
||||
*lcl.TForm
|
||||
}
|
||||
|
||||
// 创建LCL窗口并运行应用
|
||||
func (m *browserWindow) createFormAndRun() {
|
||||
// 创建LCL窗口组件
|
||||
if BrowserWindow.mainBrowserWindow == nil {
|
||||
BrowserWindow.mainBrowserWindow = new(lclBrowserWindow)
|
||||
}
|
||||
// LCL窗口
|
||||
lcl.Application.Initialize()
|
||||
lcl.Application.SetMainFormOnTaskBar(BrowserWindow.Config.MainFormOnTaskBar)
|
||||
if m.Config.EnableMainWindow {
|
||||
lcl.Application.CreateForm(&BrowserWindow.mainBrowserWindow, true)
|
||||
} else {
|
||||
lcl.Application.CreateForm(&disabledMainWindow, true)
|
||||
lcl.Application.SetShowMainForm(false)
|
||||
}
|
||||
lcl.Application.Run()
|
||||
}
|
||||
|
||||
// OnFormCreate disableMainWindow
|
||||
func (m *disableMainWindow) OnFormCreate(sender lcl.IObject) {
|
||||
// 禁用主窗口后需要创建一个新的窗口来代替主窗口显示
|
||||
lcl.Application.CreateForm(&BrowserWindow.mainBrowserWindow)
|
||||
// 显示窗口,此时的主窗口是默认显示的第一个窗口, 如果将该窗口关闭,获取主窗口函数将返回无效的窗口
|
||||
BrowserWindow.mainBrowserWindow.Show()
|
||||
}
|
||||
|
||||
// OnFormCreate LCL窗口组件窗口创建回调
|
||||
func (m *lclBrowserWindow) OnFormCreate(sender lcl.IObject) {
|
||||
m.windowProperty = &BrowserWindow.Config.WindowProperty
|
||||
@ -69,6 +101,7 @@ func (m *lclBrowserWindow) OnFormCreate(sender lcl.IObject) {
|
||||
m.ChromiumCreate(BrowserWindow.Config.ChromiumConfig(), BrowserWindow.Config.Url)
|
||||
m.defaultChromiumEvent()
|
||||
m.setProperty()
|
||||
m.SetShowInTaskBar()
|
||||
if BrowserWindow.Config.browserWindowOnEventCallback != nil {
|
||||
BrowserWindow.browserEvent.chromium = m.Chromium()
|
||||
BrowserWindow.Config.browserWindowOnEventCallback(BrowserWindow.browserEvent, m)
|
||||
|
@ -63,7 +63,7 @@ type WindowProperty struct {
|
||||
EnableClose bool // 窗口 关闭时是否关闭窗口 default: true
|
||||
EnableCenterWindow bool // 窗口 居中显示 default: true
|
||||
EnableDragFile bool // 窗口 是否允许向窗口内拖拽文件
|
||||
EnableMainWindow bool // 窗口 是否启用主窗口 default: true
|
||||
EnableMainWindow bool // 窗口 是否启用主窗口 default: true, 值为false时不再有主子窗口区分
|
||||
AlwaysOnTop bool // 窗口 窗口置顶
|
||||
X int32 // 窗口 EnableCenterWindow=false X坐标 default: 100
|
||||
Y int32 // 窗口 EnableCenterWindow=false Y坐标 default: 100
|
||||
|
@ -1010,6 +1010,24 @@ func (m *LCLBrowserWindow) CloseBrowserWindow() {
|
||||
})
|
||||
}
|
||||
|
||||
// TryCloseWindowAndTerminate
|
||||
// 尝试关闭窗口并退出应用,
|
||||
// EnableMainWindow = false
|
||||
//
|
||||
// 如果禁用主窗口, 存在多窗口时只在最后一个窗口关闭时才退出整个应用进程
|
||||
func (m *LCLBrowserWindow) TryCloseWindowAndTerminate() {
|
||||
if !BrowserWindow.Config.EnableMainWindow {
|
||||
count := len(BrowserWindow.GetWindowInfos())
|
||||
if count < 1 {
|
||||
if m.tray != nil {
|
||||
m.tray.close()
|
||||
}
|
||||
// 窗口数量已经是0个了,结束应用
|
||||
lcl.Application.Terminate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// close 内部调用
|
||||
func (m *LCLBrowserWindow) close(sender lcl.IObject, action *types.TCloseAction) {
|
||||
var ret bool
|
||||
@ -1023,6 +1041,7 @@ func (m *LCLBrowserWindow) close(sender lcl.IObject, action *types.TCloseAction)
|
||||
} else if IsWindows() { // windows 子窗口
|
||||
*action = types.CaHide
|
||||
}
|
||||
m.TryCloseWindowAndTerminate()
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user