就是運行後在右下角顯示時間的地方只有個圖標,後台運行無法打開。
應該怎麼樣寫代碼,最好在關鍵地方能夠給出說明
應該怎麼樣寫代碼,最好在關鍵地方能夠給出說明
解决方案 »
- java版中国象棋开发设计资料?
- 这两个是什么delphi 控件?
- 求助!怎样获得本机上的TTS引擎语音列表?
- DBGird使用问题
- 如何修改listview中的值?
- 在一台机器上可以同时装delphi6 和delphi7吗
- 系统文件控制的问题(急!在线等待)
- Delphi调用DLL的问题
- 急!房地产软件中的销售窗口表怎么实现?
- 传言数据库开发栏中,有个阿拉伯神灯式人物咒语是(PROGAME,你在哪里,我们相念你............不知Delphi中是否也有如此人物??)不知Delphi中是否也有如此人物??
- 求D对Paradox数据的查询,插入,修改代码
- 话说开帐号到现在有5个月了,刚刚步入5个三角,何时升星?
我用的是D7+WINDOWS XP
謝謝指教
一、从任务栏上隐藏应用程序的按纽
用过金山词霸的朋友一定对其主窗口的工作方式很感兴趣。当它显示时,在任务栏有一个对应
的按纽,而当它最小化的时候则从任务栏上消失了。如何在我们的程序中实现这一技巧呢?通过
研究Delphi程序的工件方式和试验摸索,本人得出了实现这一技巧的方法。现在写出来与大家共
享,希望能对大家编程有所帮助。其实本来实现这一技巧很容易的,只要在窗口的最小化事件代
码中加入:self.hide;就行了。但问题是Form没有最小化事件。通过摸索,本人发现当主窗口最
小化时会调用Application 对象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己
的方法,再将它安装到Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调
用show;方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Restore;
方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗
口,只要在Project代码中加入Application.ShowMainForm:=false;就行了。 以下是程序片段。{WinKill.Dpr}
program WinKill;
uses
Forms,
FMain in 'FMain.pas' {FormMain};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.ShowMainForm:=false;//*****
Application.OnMinimize:=FormMain.AppMinimize;//******
Application.Run;
end.
{Unit FMain}
.
.
.
procedure TFormMain.M_ShowClick(Sender: TObject);
begin
self.Show;
end;
procedure TFormMain.AppMinimize(Sender: TObject);
begin
inherited;
self.Hide;
end;
procedure TFormMain.FormShow(Sender: TObject);
begin
Application.Restore;
//如果将这句去掉,则第二次按最小化按纽的时候,程序将什么也不做。
end;
這個好像有用,我試試,找好久
或者直接使用封装后的托盘控件这种也是普通win32桌面应用,不是后台服务,只是可以不显示正常的窗口
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI, ExtCtrls, StdCtrls;const
WM_BARICON=WM_USER+200;
type
TForm1 = class(TForm)
Timer1: TTimer;
// procedure FormClose(Sender: TObject; var Action: TCloseAction);
// procedure Timer1Timer(Sender: TObject);
private
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage);message WM_BARICON;public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.WMSysCommand (var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_close then //最小化了.最大化 SC_ZOOM,關閉:SC_CLOSE
begin
//如果用户点击关闭窗口则将窗口隐藏并在任务栏上添加图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := ' ';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end
else
begin//如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。
DefWindowProc(Form1.Handle,Message.Msg,Message.WParam,Message.LParam);
end;
end;procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin//如果用户点击任务栏图标则将图标删除并回复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := ' ';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
end.
经测试,可行,虽然原理并不十分了解,看明白大概,有时间再去研究
好深奥