最小化到托盘乱码问题

sun1976 2006-07-15 11:12:59


版本:pb10.2

下面是找到的文章,按其方法,for 循环用mida()不管用,定义 char[64]变量也不管用
谁有有效方法,高分相赠
摆脱兄弟们帮帮忙,多谢!

其他一切正常。
相关代码如下:

myData.cbSize = 88 //long
mydata.hwnd =handle(this) //long
mydata.uID = 0 //long
mydata.uFlags = NIF_ICON + NIF_MESSAGE + NIF_TIP //long
mydata.uCallbackMessage = WM_MOUSEMOVE //long
mydata.hIcon = loadimage(0,TrayIcon,image_icon,0,0,lr_loadfromfile) //long
mydata.szTip = "打印服务器 - 中餐" //string
Shell_NotifyIcon(NIM_ADD,myData)
---------------------------------------------------------------
string ls_name = 'c:\td\interface.exe'
long ll_handle
long ll_icon

ll_handle = LoadLibrary(ls_name)
ll_icon = LoadIcon(ll_handle,1000)

istru_icondata.cbSize = 88
istru_icondata.hIcon = ll_icon
istru_icondata.uFlags += 2
istru_icondata.uCallbackMessage = 1024
istru_icondata.uFlags += 1
istru_icondata.szTip = '通讯软件'
istru_icondata.uFlags += 4
istru_icondata.uID = 1
istru_icondata.hWnd = handle(this)

Shell_NotifyIcon(0,istru_icondata)

istru_icondata.uFlags = 0

this.hide()

FreeLibrary(ll_handle)
---------------------------------------------------------------

如果pb10需要这样

string a
a="打印服务器 - 中餐"
for i=1 to LENA(A)
mydata.szTip[i] = MidA(a,i)
next
---------------------------------------------------------------

问题已经解决,谢谢大家!!

CHAR MYTIP[64]
myData.cbSize = 88
mydata.hwnd =handle(this)
mydata.uID = 0
mydata.uFlags = NIF_ICON + NIF_MESSAGE + NIF_TIP
mydata.uCallbackMessage = WM_MOUSEMOVE
mydata.hIcon = loadimage(0,TrayIcon,image_icon,0,0,lr_loadfromfile)
mytip = "打印服务器 - 中餐"
mydata.szTip = mytip

Shell_NotifyIcon(NIM_ADD,myData)

就加多了这个。。。。

CHAR MYTIP[64]
mytip = "打印服务器 - 中餐"

...全文
836 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun1976 2006-10-28
  • 打赏
  • 举报
回复
问题倒是早解决了,可惜不是这里的答案,所以不好给分
很长时间没上csdn,揭帖晚了,各位海涵
AFIC 2006-10-25
  • 打赏
  • 举报
回复
晕,不是吧,3个月了还没搞好阿,
你留下邮箱,我给你发一个好了。
sun1976 2006-10-25
  • 打赏
  • 举报
回复
多谢
不过关键在于pb10字符集不同
所以关键问题是外部函数的声明
后面加上alias for "XXXXXXX;Ansi"
关键就是;Ansi
其他的照我找到的方法做就可以
polestarxu 2006-08-15
  • 打赏
  • 举报
回复
1个PB9.0的window,可以看看


forward
global type w_systray from window
end type
type shl_1 from statichyperlink within w_systray
end type
type st_1 from statictext within w_systray
end type
type notifyicondata from structure within w_systray
end type
end forward

type notifyicondata from structure
long cbsize
long hwnd
long uid
long uflags
long ucallbackmessage
long hicon
any sztip
end type

global type w_systray from window
integer width = 1504
integer height = 912
boolean titlebar = true
string title = "SysTray演示"
boolean controlmenu = true
boolean minbox = true
boolean maxbox = true
boolean resizable = true
long backcolor = 67108864
string icon = "UserObject5!"
boolean center = true
event ue_event pbm_custom01
event ue_syscommand pbm_syscommand
shl_1 shl_1
st_1 st_1
end type
global w_systray w_systray

type prototypes

end prototypes

type variables
Constant Long NIM_ADD = 0 //显示
Constant Long NIM_MODIFY = 1 //修改
Constant Long NIM_DELETE = 2 //删除

Constant Long NIF_MESSAGEorNIF_ICONorNIF_TIP = 7
Constant Long IMAGE_ICON = 1
Constant Long LR_LOADFROMFILE = 16

Constant Long WM_LBUTTONDBLCLK = 515 //双击
Constant Long WM_RBUTTONUP = 517 //右键单击

Long hIcon

private:
str_notifyicondata istr_notifyicondata


end variables

forward prototypes
public function integer wf_addtotray (string as_icon, long al_handle, string as_tips)
public subroutine wf_removefromtray ()
end prototypes

event ue_event;/*
WM_MOUSEFIRST 512
WM_MOUSEMOVE 512
WM_LBUTTONDOWN 513
WM_LBUTTONUP 514
WM_LBUTTONDBLCLK 515
WM_RBUTTONDOWN 516
WM_RBUTTONUP 517
WM_RBUTTONDBLCLK 518
WM_MBUTTONDOWN 519
WM_MBUTTONUP 520
WM_MBUTTONDBLCLK 521
WM_MOUSELAST 521
*/

m_popup lm_popup
Integer li_X, li_Y
Integer li_flag


Choose Case lparam

CASE WM_LBUTTONDBLCLK // 双击

//删除图标、释放资源
wf_RemoveFromTray ()
//加载新图标
wf_AddToTray('sysicon2.ico', handle(this), "PB编程俱乐部")
//设置为活动窗口
SetForegroundWindow (Handle (This))
// 显示窗口
This.Show ( )

CASE WM_RBUTTONUP // 右键选择

li_X = This.X
li_Y = This.Y

//窗口最大化时处理(因不能移动,故暂设置为Normal!,之后恢复)
IF This.WindowState = Maximized! then
This.WindowState = Normal!
li_flag = 1
END IF

// 移动到屏幕外以免show 时看到
This.Move ( - This.Width - 10, - This.Height - 10 )
// 在屏幕外显示窗口,以便能看到菜单条(菜单条属于此窗口)
This.Show ( )

//设置为活动窗口
SetForegroundWindow (Handle (This))

//在鼠标位置弹出菜单
lm_popup = CREATE m_popup
lm_popup.m_item.PopMenu( PointerX(), PointerY())

// 恢复设置
IF isvalid(This) Then
This.Hide ( )
IF li_flag = 1 then
This.WindowState = Maximized!
Else
This.Move ( li_X, li_Y )
END IF
DESTROY lm_popup
END IF


END Choose

end event

event ue_syscommand;//窗口最小化时的处理

IF Commandtype = 61472 Then //最小化
wf_RemoveFromTray () //删除图标、释放资源
//加载新图标
IF wf_AddToTray('sysicon1.ico', handle(This), "PB编程俱乐部") = 1 Then
//隐藏窗口
This.Hide ( )
END IF
Return 1
End If
end event

public function integer wf_addtotray (string as_icon, long al_handle, string as_tips);// 功能:加载图标
// 参数说明:
// string as_icon :加载的图标文件名
// long al_handle :窗口句柄
// string as_tips :显示的tips


IF hIcon = 0 Then // 图标还没有装载
hIcon = LoadImage(0, as_icon, IMAGE_ICON, 0, 0, LR_LOADFROMFILE)
END IF

IF hIcon = 0 Then
MessageBox ("Error", "图标装载失败!")
Return -1
END IF

istr_notifyicondata.cbsize = 88
// 窗口句柄
istr_notifyicondata.hwnd = al_handle
istr_notifyicondata.uid = 0
// 窗口回调事件号,pbm_custom01为1024,pbm_custom02为1025,依此类推
istr_notifyicondata.ucallbackmessage = 1024
// 图标
istr_notifyicondata.hIcon = hIcon
// 标识值,即为显示tips
istr_notifyicondata.tips = as_tips

istr_notifyicondata.uflags = NIF_MESSAGEorNIF_ICONorNIF_TIP//7

// 显示icon关键函数, NIM_ADD 0为显示,1为修改,2为删除
shell_notifyicon ( NIM_ADD, istr_notifyicondata )

return 1



end function

public subroutine wf_removefromtray ();
//删除图标 NIM_DELETE = 2
Shell_NotifyIcon( NIM_DELETE, istr_notifyicondata )

//释放资源
IF hIcon <> 0 Then DestroyIcon (hIcon)
hIcon = 0
end subroutine

on w_systray.create
this.shl_1=create shl_1
this.st_1=create st_1
this.Control[]={this.shl_1,&
this.st_1}
end on

on w_systray.destroy
destroy(this.shl_1)
destroy(this.st_1)
end on

event close;//删除图标、释放资源
wf_RemoveFromTray ()


end event

event open;//加载图标sysicon1.ico
IF wf_AddToTray('sysicon1.ico', handle(this), "PB编程俱乐部") = 1 Then
//隐藏窗口
This.Hide ( )
END IF
end event

type shl_1 from statichyperlink within w_systray
integer x = 174
integer y = 408
integer width = 1047
integer height = 72
integer textsize = -12
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Arial"
boolean underline = true
string pointer = "HyperLink!"
long textcolor = 134217856
long backcolor = 67108864
string text = "PB编程俱乐部 www.kejx.com"
alignment alignment = center!
boolean focusrectangle = false
string url = "http://www.kejx.com"
end type

type st_1 from statictext within w_systray
integer x = 288
integer y = 212
integer width = 855
integer height = 72
integer textsize = -12
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Arial"
long textcolor = 134217730
long backcolor = 67108864
string text = "点最小化可加载到SysTray"
boolean focusrectangle = false
end type

sun1976_2 2006-08-13
  • 打赏
  • 举报
回复
邮箱sunpengsun@163.com
sun1976_2 2006-08-13
  • 打赏
  • 举报
回复
再顶
sun1976 2006-07-18
  • 打赏
  • 举报
回复
自己顶起
sun1976 2006-07-18
  • 打赏
  • 举报
回复
经试验,问题仍未解决
sun1976 2006-07-17
  • 打赏
  • 举报
回复
谢谢各位
+char(0)试过了,不管用,是全乱,不是最后一位乱

现在公司没有pb10,下班回家试试mydata.szTip需要定义成blob型了吧?
lzheng2001 2006-07-17
  • 打赏
  • 举报
回复
pb10应该有把unicode转化成ANSI的函数(试试toAnsi),你查查联机帮助吧.
你把字符串先转成ANSI可能不会有乱码了
dytxy 2006-07-17
  • 打赏
  • 举报
回复
我不知道你出现乱码是怎么样的?如果是最后出现一个乱码,以前我碰到过,你在最后加个char(0)试试

mydata.szTip = "打印服务器 - 中餐"+char(0)
sun1976 2006-07-16
  • 打赏
  • 举报
回复
'interface.exe'是什么?
是我要最小化到托盘的应用程序的名称吗?
ll_icon = LoadIcon(ll_handle,1000) 后面这个参数1000又是根据什么确定的呢?
vc555 2006-07-16
  • 打赏
  • 举报
回复
把图标的图象文件放到pbr里。改ls_name='interface.exe'。
sun1976 2006-07-16
  • 打赏
  • 举报
回复
还有个问题,最小化的时候到了右下角,但是显示不出图标
怎么指定自己要显示的图标啊?
有其他版本的例子也好
一直没搞清ls_name = 'c:\td\interface.exe' 应该如何根据自己的情况设置
谢谢
sun1976 2006-07-16
  • 打赏
  • 举报
回复
多谢
可是不知道该怎么改啊
pb里结构的变量定义成什么类型才能正常传递过去呀
lzheng2001 2006-07-16
  • 打赏
  • 举报
回复
没装pb10自己改代码吧
lzheng2001 2006-07-16
  • 打赏
  • 举报
回复
pb10字符串用了unicode,而这个api用的是ANSI,问题可能就这个原因导致.
圣殿骑士18 2006-07-16
  • 打赏
  • 举报
回复
呵呵
sun1976 2006-07-16
  • 打赏
  • 举报
回复
自己顶起
欢迎帮顶
sun1976 2006-07-16
  • 打赏
  • 举报
回复
up
这是老外开发的IBM风扇控制程序,能自己控制风扇转动的温度和速度。 我仅仅是对界面进行了汉化,并且修正了乱码问题。 打开编辑fancontrol.ini文件,改变active=1,默认为0,退出,运行fancontrol.exe,选择mode为smart即可通过程序控制风扇转动速度。 温度控制值在fancontrol.ini文件中可改变。 我的测试结果,如果温度选择 48度-52度风扇转速1,在CPU降频使用时,风扇的转速噪音基本可以忽略,风扇启停的比例大概是1:1,如把风扇风量固定选1,则CPU温度在45~46度之间变动。 现在感觉要是能最小化就好了,这个程序经过我昨天一晚上的下载东西的测试来看,还是不错的,按上面的设定,CPU温度就没超过52度,应该没什么大碍。 这个程序一关闭,风扇的控制权就交给BIOS了。最新版v018,增加可忽略一些温度的选择。 fancontrol.ini的设置: 1:Active=(0,1,2) 设置风扇控制程序的状态,0为不控制,1为容许控制,2为启动后就自动控制; 2:Cycle=5 设置检测温度的时间间隔,5为5秒; 3:MinimizeToSysTray=(0,1) 设置最小化时的状态,0为不变化,1为最小化到系统托盘; 4:MinimizeOnClose=(0,1) 设置选择关闭程序时的状态,0为关闭,1为最小化到系统托盘; 5:StartMinimized=(0,1) 设置程序启动时是最小化还是隐藏到系统托盘,0为最小化,1为到系统托盘; 6:IconLevels=50 55 60 选择系统图标三种颜色代表的温度,第一位对应黄色,第二位对应橙色,第三位对应红色; 7:FanBeep=1 1 设置风扇启动和停止的时间,单位为ms; 8:MaxReadErrors= 10 设置在出现读温度值错误的次数,程序将转入BIOS控制; 9:IgnoreSensors=PWR,YYY,ZZZ 设置程序忽略控制的温度项目,填入相应的名称,则程序将不考虑此项温度值; 10:Level=48 0 Level=51 1 Level=55 4 Level=60 7 Level=70 128 设置程序控制的温度值和相对应的风扇转速,按系统各部件的最高温度控制; 更多资源请浏览http://www.cnwan.com.cn

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧