各位大虾:救命啊!程序就要上交了,却出现了一个这样的win32问题.在线等。(50分)

  • 主题发起人 主题发起人 adoquery8
  • 开始时间 开始时间
A

adoquery8

Unregistered / Unconfirmed
GUEST, unregistred user!
我做的是一个消息与文件传递的程序,c/s模式,都加入了托盘程序,并且机器启动时自动运行,最小化置于右下角。但开机启动后,在client端双击右下角的图标,却出现:“win32 error code 1400 无效的句柄。”的错误,请问这倒低是什么原因?有谁以前也碰到这样的问题吗?我怀疑是因为托盘程序出问题了。怎么解决?
在线等!
 
你的托盘程序如何处理双击消息的。?
 
对不起,刚才有点事走开了:)我的托盘程序处理双击消息是直接用鼠标双击右下角的图标。我刚才测试了一下,发现确实是托盘程序出了问题。因为把client和server主程序中的托盘程序去掉后,就没出问题了。请问一个比较老的问题:到底用什么做托盘程序好?
我用的是http://www.delphibbs.com/delphibbs/dispq.asp?lid=975077这上面的,现在看来好象不行,谢谢!!
 
要求是:
1、开机自动运行
2、并且自动最小化在桌面的右下角(也就是时间那块区域)
3、开机后平时也在桌面的右下角,用户双击程序图标时,则显示程序主界面。(我的程序没用数据库)
4、用户最小化主界面时候,则又回到桌面的右下角.
谢谢,一直在线等
 
我这有个托盘的例子,供你参考:
unit SysTrayFrm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ShellAPI, Menus;

const
MyMsg = WM_USER + 1;
type
TForm1 = class(TForm)
Timer1: TTimer;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N7Click(Sender: TObject);
private
{ Private declarations }
public
procedure IconTray(var Msg:TMessage); message MyMsg;
end;

var
Form1: TForm1;
nid : NotifyIconData;
iconnum: Integer;
implementation

{$R *.dfm}
{$R icon.res}

procedure TForm1.FormCreate(Sender: TObject);
begin
nid.cbsize:=sizeof(NotifyIconData);
nid.wnd:=handle;
nid.uID:=0;
nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
nid.uCallbackMessage:=MyMsg;
nid.hIcon:=Application.Icon.Handle;
//设置鼠标经过提示
nid.szTip:='鼠标经过提示';
//在系统托盘添加图标
shell_NotifyIcon(NIM_ADD,@nid);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
GetWindowLong(Application.Handle,GWL_EXSTYLE)
or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TForm1.IconTray(var Msg:TMessage);
var pt:TPoint;
begin
inherited;
//如果点击的是鼠标右键,则弹出预先定义好的菜单
if Msg.LParam = wm_rbuttondown then
begin
//获得鼠标点击位置
GetCursorPos(pt);
SetForeGroundWindow(handle);
//在点击位置弹出
PopupMenu1.Popup(pt.x,pt.y);
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(iconnum);
case iconnum of
1: nid.hIcon:=LoadIcon(HInstance,'PLAY');
2: nid.hIcon:=LoadIcon(HInstance,'STOP');
3: nid.hIcon:=LoadIcon(HInstance,'PAUSE');
end;
StrPCopy(nid.szTip,'正使用图标'+IntToStr(iconnum));
if iconnum>3 then
iconnum:=0;
Shell_NotifyIcon(NIM_MODIFY,@nid);
end;
 
在主窗体的FormCreate事件中加入下列代码
Application.ShowMainForm:=false;
隐藏状态拦显示图标。
加入Frmmain.Visible :=false;隐藏主窗体。
//隐藏主窗体
procedure TFrmmain.N9Click(Sender: TObject);
begin
Frmmain.Visible :=false;
end;
//显示主窗体
procedure TFrmmain.N8Click(Sender: TObject);
begin
Frmmain.Visible :=true;
end;
 
Timer1Timer这个时间控件是什么意思?我好象不需要这个控件,因为启动,双击都是由用户来控制.
 
Timer1Timer里的事件就是让你的托盘图标没秒在变化一种,就像QQ登录时那样。
 
adoquery8,我也正在做一个文件传输工具,也是要上交的。可在delphi7中我无法实现,无从下手,你能不能帮帮忙,提示一下?有源码更好,我不胜感谢!!
 
后退
顶部