mirror of
https://gitee.com/energye/energy.git
synced 2024-12-02 03:37:48 +08:00
A: 增加 LCL 组件窗口可启用/禁用主窗口配置
This commit is contained in:
parent
4aaab92557
commit
1ef8330224
@ -108,6 +108,7 @@ func (m *TCEFApplication) DoMessageLoopWork() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunMessageLoop
|
// RunMessageLoop
|
||||||
|
// Chrome runtime
|
||||||
func (m *TCEFApplication) RunMessageLoop() {
|
func (m *TCEFApplication) RunMessageLoop() {
|
||||||
defer func() {
|
defer func() {
|
||||||
logger.Debug("application run value loop end")
|
logger.Debug("application run value loop end")
|
||||||
|
@ -33,6 +33,8 @@ var (
|
|||||||
},
|
},
|
||||||
windowInfo: make(map[int32]IBrowserWindow),
|
windowInfo: make(map[int32]IBrowserWindow),
|
||||||
}
|
}
|
||||||
|
// disabledMainWindow 如果在Config配置中禁用主窗口(EnableMainWindow=false)时, 使用该窗口替代主窗口
|
||||||
|
disabledMainWindow *disableMainWindow
|
||||||
browserProcessStartAfterCallback browserProcessStartAfterCallbackFunc
|
browserProcessStartAfterCallback browserProcessStartAfterCallbackFunc
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -86,17 +88,8 @@ func Run(app *TCEFApplication) {
|
|||||||
// VF窗口 MessageLoop
|
// VF窗口 MessageLoop
|
||||||
application.RunMessageLoop()
|
application.RunMessageLoop()
|
||||||
} else {
|
} else {
|
||||||
// 创建LCL窗口组件
|
// LCL窗口 创建并运行应用
|
||||||
if BrowserWindow.mainBrowserWindow == nil {
|
BrowserWindow.createFormAndRun()
|
||||||
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()
|
|
||||||
//lclwidget.CustomWidgetSetFinalization()
|
//lclwidget.CustomWidgetSetFinalization()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,38 @@ type lclBrowserWindow struct {
|
|||||||
LCLBrowserWindow
|
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窗口组件窗口创建回调
|
// OnFormCreate LCL窗口组件窗口创建回调
|
||||||
func (m *lclBrowserWindow) OnFormCreate(sender lcl.IObject) {
|
func (m *lclBrowserWindow) OnFormCreate(sender lcl.IObject) {
|
||||||
m.windowProperty = &BrowserWindow.Config.WindowProperty
|
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.ChromiumCreate(BrowserWindow.Config.ChromiumConfig(), BrowserWindow.Config.Url)
|
||||||
m.defaultChromiumEvent()
|
m.defaultChromiumEvent()
|
||||||
m.setProperty()
|
m.setProperty()
|
||||||
|
m.SetShowInTaskBar()
|
||||||
if BrowserWindow.Config.browserWindowOnEventCallback != nil {
|
if BrowserWindow.Config.browserWindowOnEventCallback != nil {
|
||||||
BrowserWindow.browserEvent.chromium = m.Chromium()
|
BrowserWindow.browserEvent.chromium = m.Chromium()
|
||||||
BrowserWindow.Config.browserWindowOnEventCallback(BrowserWindow.browserEvent, m)
|
BrowserWindow.Config.browserWindowOnEventCallback(BrowserWindow.browserEvent, m)
|
||||||
|
@ -63,7 +63,7 @@ type WindowProperty struct {
|
|||||||
EnableClose bool // 窗口 关闭时是否关闭窗口 default: true
|
EnableClose bool // 窗口 关闭时是否关闭窗口 default: true
|
||||||
EnableCenterWindow bool // 窗口 居中显示 default: true
|
EnableCenterWindow bool // 窗口 居中显示 default: true
|
||||||
EnableDragFile bool // 窗口 是否允许向窗口内拖拽文件
|
EnableDragFile bool // 窗口 是否允许向窗口内拖拽文件
|
||||||
EnableMainWindow bool // 窗口 是否启用主窗口 default: true
|
EnableMainWindow bool // 窗口 是否启用主窗口 default: true, 值为false时不再有主子窗口区分
|
||||||
AlwaysOnTop bool // 窗口 窗口置顶
|
AlwaysOnTop bool // 窗口 窗口置顶
|
||||||
X int32 // 窗口 EnableCenterWindow=false X坐标 default: 100
|
X int32 // 窗口 EnableCenterWindow=false X坐标 default: 100
|
||||||
Y int32 // 窗口 EnableCenterWindow=false Y坐标 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 内部调用
|
// close 内部调用
|
||||||
func (m *LCLBrowserWindow) close(sender lcl.IObject, action *types.TCloseAction) {
|
func (m *LCLBrowserWindow) close(sender lcl.IObject, action *types.TCloseAction) {
|
||||||
var ret bool
|
var ret bool
|
||||||
@ -1023,6 +1041,7 @@ func (m *LCLBrowserWindow) close(sender lcl.IObject, action *types.TCloseAction)
|
|||||||
} else if IsWindows() { // windows 子窗口
|
} else if IsWindows() { // windows 子窗口
|
||||||
*action = types.CaHide
|
*action = types.CaHide
|
||||||
}
|
}
|
||||||
|
m.TryCloseWindowAndTerminate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user