delphi 托盘图标 主窗体就隐藏,跳出一个窗体就缩小的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 托盘图标 主窗体就隐藏,跳出一个窗体就缩小的相关的知识,希望对你有一定的参考价值。

我想的是点击 最小化 就把跳出别个窗体 主窗体就隐藏,跳出一个窗体就缩小的 就像迅雷图标一个样 然后任务栏上就不要显示了! 别人就是最小化到托盘然后就不显示了显示在托盘里面 怎么才可以不显示和显示呢?

参考技术A SetWindowLong
用这个设置一下就可以
任务栏
上不显示你的程序图标,隐藏到托盘这个好做吧,abf控件里有个abfTrayIcon1放上去就能实现的,那个控件加个popupmenu就可以了右键点下显示还是
隐藏你
自己控制
通过abfTrayIcon1.HideMainForm

showmainform控制
参考技术B 你看看你用的托盘控件是什么,在托盘图标的双击事件中
设置主窗体隐藏
应该就好了
就是不知道你的控件支持不支持
可以自己查下控件属性

关于创建无窗体程序的一点心得

这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

以上是关于delphi 托盘图标 主窗体就隐藏,跳出一个窗体就缩小的的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 在应用程序运行时更改主窗体

关于创建无窗体程序的一点心得

delphi 给程序加托盘图标

wpf托盘图标问题

delphi平台,在一个主窗体上打开两个子窗体,也就是:打开一个子窗体之后,再打开第二个窗体第一个窗体不关闭

qt系统托盘显示无主窗体