v2.5.3 demos: tray

This commit is contained in:
杨红岩 2023-02-03 12:10:46 +08:00
parent 1450d74412
commit e46ff7865d
3 changed files with 247 additions and 0 deletions

117
example/tray/tray-demo.go Normal file
View File

@ -0,0 +1,117 @@
package traydemo
import (
"fmt"
"github.com/energye/energy/cef"
"github.com/energye/energy/common"
"github.com/energye/golcl/lcl"
"time"
)
// LCL组件托盘, 适用windows和macosx, 不支持linux因GTK2和GTK3共存问题,
func LCLTrayDemo(browserWindow cef.IBrowserWindow) {
window := browserWindow.AsLCLBrowserWindow().BrowserWindow()
//托盘 windows linux macos 系统托盘
newTray := window.NewTray()
newTray.SetTitle("任务管理器里显示的标题")
newTray.SetHint("这里是文字\n文字啊")
if common.IsLinux() {
newTray.SetIconFS("resources/icon.png")
} else {
newTray.SetIconFS("resources/icon.ico")
}
tray := newTray.AsLCLTray()
menu1 := tray.AddMenuItem("父菜单", nil)
//带图标的菜单
iconItem := tray.NewMenuItem("带个图标", nil)
iconItem.Bitmap().SetSize(32, 32) //图标情况调整大小
iconItem.Bitmap().SetTransparent(true) //透明
icon := lcl.NewIcon()
icon.LoadFromFSFile("resources/icon_1.ico")
iconItem.Bitmap().Canvas().Draw(0, 0, icon) //画上去
tray.TrayMenu().Items().Add(iconItem)
menu1.Add(tray.NewMenuItem("子菜单", func() {
lcl.ShowMessage("子菜单点击 提示消息")
}))
tray.AddMenuItem("显示气泡", func() {
tray.Notice("气泡标题", "气泡内容", 2000)
})
tray.AddMenuItem("显示/隐藏", func() {
vis := window.Visible()
cef.BrowserWindow.GetWindowInfo(1)
window.SetVisible(!vis)
})
tray.AddMenuItem("退出", func() {
browserWindow.CloseBrowserWindow()
})
//托盘 end
tray.Show()
}
//系统托盘 和LCL组件差不多,但不如LCL组件的好用适用 windows,linux,macosx
//
//推荐linux中使用
func SysTrayDemo(browserWindow cef.IBrowserWindow) {
sysTray := browserWindow.NewSysTray()
if common.IsLinux() {
sysTray.SetIconFS("resources/icon.png")
} else {
sysTray.SetIconFS("resources/icon.ico")
}
sysTray.SetHint("中文hint\n换行中文")
sysTray.SetOnClick(func() {
fmt.Println("SetOnClick")
})
tray := sysTray.AsSysTray()
check := tray.AddMenuItem("check")
check.Check()
not := tray.AddMenuItem("通知")
not.Click(func() {
tray.Notice("标题", "内notice 是一个跨平台的系统通知库\nnotice 是一个跨平台的系统通知库", 1000)
})
enable := tray.AddMenuItem("启用/禁用")
enable.Click(func() {
fmt.Println("启用/禁用 点击")
})
tray.AddSeparator()
menuItem := tray.AddMenuItem("1级菜单1", func() {
fmt.Println("1级菜单1")
})
menuItem.SetIconFS("resources/icon.ico")
tray.AddSeparator()
item := tray.AddMenuItem("1级菜单2")
item.AddSubMenu("2级子菜单1")
sub2Menu := item.AddSubMenu("2级子菜单2")
sub2Menu.AddSubMenu("3级子菜单1")
tray.AddSeparator()
tray.AddMenuItem("退出", func() {
fmt.Println("退出")
browserWindow.CloseBrowserWindow()
})
sysTray.Show()
//测试图标切换
go func() {
var b bool
for {
time.Sleep(time.Second * 2)
b = !b
if b {
sysTray.SetHint(fmt.Sprintf("%d\n%v", time.Now().Second(), b))
sysTray.SetIconFS("resources/icon_1.ico")
menuItem.SetIconFS("resources/icon_1.ico")
enable.SetLabel(fmt.Sprintf("%d\n%v", time.Now().Second(), b))
enable.Enable()
check.Check()
} else {
sysTray.SetHint(fmt.Sprintf("%d\n%v", time.Now().Second(), b))
sysTray.SetIconFS("resources/icon.ico")
menuItem.SetIconFS("resources/icon.ico")
enable.SetLabel(fmt.Sprintf("%d\n%v", time.Now().Second(), b))
enable.Disable()
check.Uncheck()
}
}
}()
}

View File

@ -0,0 +1,26 @@
//go:build !windows
// +build !windows
package traydemo
import (
"github.com/energye/energy/cef"
)
// 仅适用windows
//
// LCL + [CEF] 托盘 只适用 windows 基于html 和 ipc 实现功能
//
//推荐在windows或macosx中使用
func LCLCefTrayDemo(browserWindow cef.IBrowserWindow) {
}
// 仅适用windows
//
// LCL + [VF] 托盘 只适用 windows 基于html 和 ipc 实现功能
//
// VF组件托盘无法使用LCL相关组件
func LCLVFTrayDemo(browserWindow cef.IBrowserWindow) {
}

View File

@ -0,0 +1,104 @@
//go:build windows
// +build windows
package traydemo
import (
"fmt"
"github.com/energye/energy/cef"
"github.com/energye/energy/ipc"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/types"
)
// 仅适用windows
//
// LCL + [CEF] 托盘 只适用 windows 基于html 和 ipc 实现功能
//
//推荐在windows或macosx中使用
func LCLCefTrayDemo(browserWindow cef.IBrowserWindow) {
lclBw := browserWindow.AsLCLBrowserWindow().BrowserWindow()
var url = "http://localhost:22022/tray-lcl-vf.html"
tray := browserWindow.NewCefTray(250, 300, url)
cefTray := tray.AsCEFTray()
tray.SetTitle("任务管理器里显示的标题")
tray.SetHint("这里是文字\n文字啊")
tray.SetIconFS("resources/icon.ico")
tray.SetOnClick(func() {
fmt.Println("SetOnClick")
})
ipc.IPC.Browser().On("tray-show-balloon", func(context ipc.IIPCContext) {
fmt.Println("tray-show-balloon")
cefTray.Notice("气泡标题", "气泡内容", 2000)
cefTray.Hide()
fmt.Println("tray-show-balloon end")
})
ipc.IPC.Browser().On("tray-show-main-window", func(context ipc.IIPCContext) {
vb := !lclBw.Visible()
lclBw.SetVisible(vb)
if vb {
if lclBw.WindowState() == types.WsMinimized {
lclBw.SetWindowState(types.WsNormal)
}
lclBw.Focused()
}
cefTray.Hide()
})
ipc.IPC.Browser().On("tray-close-main-window", func(context ipc.IIPCContext) {
browserWindow.CloseBrowserWindow()
})
ipc.IPC.Browser().On("tray-show-message-box", func(context ipc.IIPCContext) {
cef.QueueAsyncCall(func(id int) {
lcl.ShowMessage("tray-show-message-box 提示消息")
})
cefTray.Hide()
})
//托盘 end
}
// 仅适用windows
//
// LCL + [VF] 托盘 只适用 windows 基于html 和 ipc 实现功能
//
// VF组件托盘无法使用LCL相关组件
func LCLVFTrayDemo(browserWindow cef.IBrowserWindow) {
vfBw := browserWindow.AsViewsFrameworkBrowserWindow().BrowserWindow()
var url = "http://localhost:22022/tray-lcl-vf.html"
tray := browserWindow.NewCefTray(250, 300, url)
vfTray := tray.AsViewsFrameTray()
tray.SetTitle("任务管理器里显示的标题")
tray.SetHint("这里是文字\n文字啊")
tray.SetIconFS("resources/icon.ico")
tray.SetOnClick(func() {
fmt.Println("SetOnClick")
})
ipc.IPC.Browser().On("tray-show-balloon", func(context ipc.IIPCContext) {
fmt.Println("tray-show-balloon")
vfTray.Notice("气泡标题", "气泡内容", 2000)
vfTray.Hide()
fmt.Println("tray-show-balloon end")
})
var vfBwVisible = true
ipc.IPC.Browser().On("tray-show-main-window", func(context ipc.IIPCContext) {
if vfBwVisible {
vfBw.Hide()
vfBwVisible = false
} else {
vfBw.Show()
vfBwVisible = true
}
vfTray.Hide()
})
ipc.IPC.Browser().On("tray-close-main-window", func(context ipc.IIPCContext) {
browserWindow.CloseBrowserWindow()
})
ipc.IPC.Browser().On("tray-show-message-box", func(context ipc.IIPCContext) {
//在VF窗口组件中无法使用LCL组件
//cef.QueueAsyncCall(func(id int) {
// lcl.ShowMessage("tray-show-message-box 提示消息")
//})
vfTray.Hide()
})
//托盘 end
}