怎样隐藏窗体.

chenfySoft 2002-06-01 06:39:47
我编写了一个托盘程序,现在想在程序运行时把窗体隐藏起来,并且不出现在Windows的任务栏中,当双击托盘图标时显示窗体,应该怎样实现??
谢谢各位高手。
...全文
392 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
buynoo 2010-06-01
  • 打赏
  • 举报
回复
form1.hide;
tangyong_delphi 2002-06-02
  • 打赏
  • 举报
回复
up
halo_hell 2002-06-02
  • 打赏
  • 举报
回复
我已经发给你了,我可要你的分呀!
dupenf 2002-06-02
  • 打赏
  • 举报
回复
wo yao
dupenf@163.com
halo_hell 2002-06-02
  • 打赏
  • 举报
回复
我有一个这样的托盘控件,你要不要?是免费的!
mingyeh 2002-06-02
  • 打赏
  • 举报
回复
在工程文件的
Application.Run;
前面加上
Application.ShowMainForm:=False;
yang6130 2002-06-02
  • 打赏
  • 举报
回复
1.想在程序运行时把窗体隐藏起来,并且不出现在Windows的任务栏中:self.hide;
2.双击托盘图标时显示窗体(这里假设你已经将ntida.uCallbackMessage := MYmsg;(ntida是TNotifyIcondata类型,用于在托盘区加图标用的数据结构);

const
mymsg = wm_user + 100; //自定义消息,用于处理用户在图标上点击鼠标的事件
iid = 100; //用户自定义数值,在TnotifyIconData类型全局变量ntida中使用
type
TForm1 = class(TForm)
......
private
//自定义消息处理函数,处理鼠标点击图标事件
procedure onmymsg(var message: tmessage); message mymsg;
public
{ Public declarations }
end;
var
Form1: TForm1;
ntida: TNotifyIcondata;
//用于增加和删除系统状态图标
implementation
{$R .DFM}
procedure TForm1.Onmymsg(var message: tmessage);
begin
if message.LParam = WM_LBUTTONDBLCLK then begin//如果双击显示窗口
//显示应用程序窗口
ShowWindow(Handle, SW_SHOW);
//在任务栏上显示应用程序窗口
ShowWindow(Application.handle, SW_SHOW);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
not (GetWindowLong(Application.handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW));
end;
message.Result := 0;
end
knock 2002-06-01
  • 打赏
  • 举报
回复
在onshow和oncreate事件中都要加:ShowWindow(Application.Handle,SW_HIDE);
才可以,不然第二次让它show的时候状态栏里又有了
qiandeng 2002-06-01
  • 打赏
  • 举报
回复
showwindow(application.handle,sw_hide);

setwindowlong(application.handle,gwl_exstyle,getwindowlong(application.handle,gwl_exstyle) or ws_ex_toolwindow and not ws_ex_appwindow);
surfguy 2002-06-01
  • 打赏
  • 举报
回复
我以前用过,一句话
procedure TForm1.FormCreate(Sender: TObject);
begin
showwindow(application.handle,sw_hide);
end;

ahuige 2002-06-01
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
begin
showwindow(application.handle,sw_hide);
setwindowlong(application.handle,gwl_exstyle,
getwindowlong(application.handle,gwl_exstyle)
or ws_ex_toolwindow and not ws_ex_appwindow);
end;
有了以上代码,最小化以后,在任务栏就看不到了。自己试试吧
DavidFan 2002-06-01
  • 打赏
  • 举报
回复
开始时隐藏可以在Project1.dpr中加入一下语句
Application.ShowMainForm:=False;
Application.CreateForm(TForm1,Form1);
....................
ShowWindow(Application.Handle,SW_HIDE);
显示则相反.................
zhptj 2002-06-01
  • 打赏
  • 举报
回复
uses里加入shellapi
zhptj 2002-06-01
  • 打赏
  • 举报
回复
form1.show;这个是显示
隐藏我再找找
纯冰糖 2002-06-01
  • 打赏
  • 举报
回复
那是隐藏进程的代码,对不起,不是你需要的。
application.showmainform:=false;
chenfySoft 2002-06-01
  • 打赏
  • 举报
回复
楼上的具体怎么使用,我用了不管用,窗体还在那。
dreamfan 2002-06-01
  • 打赏
  • 举报
回复
hide
纯冰糖 2002-06-01
  • 打赏
  • 举报
回复
有个api函数可以写的了 ,我真的不记得了,好像是system******什么,你去看看帮助。
const
RSPSIMPLESERVICE = 1;
RSPUNREGISTERSERVICE = 0;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord;stdcall; external 'KERNEL32.DLL';

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID, RSPSIMPLESERVICE);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
RegisterServiceProcess (GetCurrentProcessID, RSPUNREGISTERSERVICE);
end;
可以在热键内隐藏进程!!但是可能你不需要。那就保留吧。


My_first 2002-06-01
  • 打赏
  • 举报
回复
你下一个lmd控件包,里面有个系统托盘控件.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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