首页 > 代码库 > 关于创建无窗体程序的一点心得
关于创建无窗体程序的一点心得
这2天在写一个工作统计的小东西, 设计思路是创建一个只有托盘图标的程序, 无主窗体, 唯一查看窗体都是动态创建关闭销毁的
使用Delphi自带的TrayIcon控件在DataModule里创建托盘, 由于没有主窗体, 所以设置Application.MainFormOnTaskbar := False;
在查看窗体显示后, 无论点关闭还是最小化都要求关闭窗体, 点击任务栏按钮也一样
但是运行后检查实际效果发现, 任务栏按钮没有反应, 而显示出的窗体在点击最小化以后是缩小到桌面左下角
经过一系列跟踪VCL发现(过程太复杂了懒得写了^_^), 原来是因为非主窗体, 所以消息都没有经过Application托管, 所以想要达到目的还需要自己处理消息
改动如下:
var nMSG: TMSG;begin Application.Initialize; ReportMemoryLeaksOnShutdown := True; Application.MainFormOnTaskbar := False; Application.CreateForm(TDM, DM); while GetMessage(nMSG, 0, 0, PM_NOREMOVE) do begin {在消息循环里处理关闭/最小化消息, 这个消息是任务栏按钮触发的} case nMSG.message of WM_SYSCOMMAND: case nMsg.wParam of SC_CLOSE, SC_MINIMIZE: DM.SetView(False); end; end; TranslateMessage(nMSG); DispatchMessage(nMSG); end; Application.Run;end.
TFrmMain = class(TForm) ... private { Private declarations } {窗口里处理最小化按钮消息} procedure WMSYSCOMMAND(var msg: TMessage); message WM_SYSCOMMAND; public { Public declarations } end;procedure TFrmMain.WMSYSCOMMAND(var msg: TMessage);begin inherited; case msg.WParam of SC_MINIMIZE: Close; end;end;
目前还有个问题没解决: 在点击了显示桌面以后窗体不能自动关闭NND 这个实在没啥思路, 监控了消息, 什么都没有, 看来是需要弄个API钩子了
http://www.cnblogs.com/hs-kill/p/3345165.html
关于创建无窗体程序的一点心得
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。