中国开发网: 论坛: Delphi/BCB: 贴子 510159
龙之吻
【技术铁】处理消息的时候栈溢出,找不到错误的原因,各位大善人帮帮藕啊!快疯了的说。。
这个程序的功能是:让程序注册到系统托盘,还可以显示那种汽泡提示。点程序的关闭按钮最小化到托盘,右击图盘图标,弹出右键菜单。
鼠标移动到程序的托盘图标上,得到peekMessage的是一条消息是WM_TIMER,然后peek,就溢出了。


MYWM_NOTIFY = WM_APP + 100;
procedure MyNotify(var Message: TMessage); message MYWM_NOTIFY;


procedure TfrmMain.MyNotify(var Message: TMessage);
var MousePos: TPoint;
Fresult: boolean;
begin
case Message.Msg of
MYWM_NOTIFY:
begin
case Message.LParam of
WM_RBUTTONUP:
begin
Fresult := GetCursorPos(MousePos);
if Fresult then
begin
SetForegroundWindow(frmMain.Handle);
frmMain.pm_Main.Popup(MousePos.x, MousePos.y);
end else
frmMain.Show;
end;
WM_LBUTTONUP:
begin
frmMain.Show;
SetForegroundWindow(frmMain.Handle);
end;
end;
end;
end;
inherited Dispatch(Message);
end;

下面这一段是往托盘发个气球泡
function TfrmMain.TrayMessage(dwMessage, IconIndex: integer; szInfo: PChar; szInfoTitle: PChar): boolean;
var tnd: NotifyIconData;
FResult: boolean;
begin
FResult := false;
case dwMessage of
NIM_MODIFY:
begin
tnd.cbSize := sizeof(NOTIFYICONDATA);
tnd.Wnd := Handle;
tnd.uID := IDC_MYICON;
tnd.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
tnd.uCallbackMessage := MYWM_NOTIFY;
tnd.hIcon := HICON(IconHandle(IconIndex));
lstrcpyn(tnd.szTip, '自动更新程序', sizeof(tnd.szTip));
end;
NIM_ADD:
begin
tnd.cbSize := sizeof(NOTIFYICONDATA);
tnd.Wnd := Handle;
tnd.uID := IDC_MYICON;
tnd.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
tnd.uCallbackMessage := MYWM_NOTIFY;
lstrcpyn(tnd.szTip, '自动更新程序', sizeof(tnd.szTip));
tnd.hIcon := HICON(IconHandle(IconIndex));
end;
NIM_DELETE:
begin
tnd.cbSize := sizeof(NOTIFYICONDATA);
tnd.Wnd := Handle;
tnd.uID := IDC_MYICON;
tnd.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
tnd.uCallbackMessage := MYWM_NOTIFY;
end;
end;
if Shell_NotifyIcon(dwMessage, @tnd) then
FResult := true;
Result := FResult;
end;


机器人,这首歌学会了没有?

我们的目标是->没有蛀牙!

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录