窗体控件笔记

顺便说一下,今天印花税下降,股市从早上开盘到现在一个小时升了9.06%,天啊,太疯狂了!

最近要写一些硬件接口的程序(OPC、MOBY..)又从.NET回归到DELPHI了,又想抽象一些,所以写点笔记回忆一下写窗体控件!

1.从窗体控件开始才有HANDLE熟悉,即TWinControl开始 ,但一般用TCustomControl来继承
2.如果直接SHIFT点击引用的控件单元无法定位到哪个单元文件,说明引用的DCU不是个上次哪个,删除DCU,从新编译即可!(前提:你搜索路径对)
3.修改组件的属性后,好像必须重新编译组件所在的包,否则就不会出现新的属性值!(好像有别的方法更快捷,忘记了)
4.声明接受消息的事件必须在控件的protected属性下
5.内嵌入TTimer组件的时候不能单元QExtCtrls,而应该是ExtCtrls,而且别挂到主窗体下去
6.让程序在任务栏中隐藏,在主窗体的CREATE事件里面加
//隐藏
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
//显示
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_APPWINDOW); 
   其实如果不是要放到控件内,就直接用FORM的HIDE方法就可以了,即最小化且在任务栏中隐藏了

Delphi 2010可以在工程代码里面加:

  Application.MainFormOnTaskbar := True;
  Application.ShowMainForm := False;
  ShowWindow(Application.Handle, SW_HIDE);


7.任务栏托盘上放图标,还是用TRAYICON控件比较好,自己写还是比较麻烦,不集成到控件内了!

procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure Tfrmmain.WMSysCommand(var Message: TMessage);
begin
    
if Message.WParam = SC_ICON then
  begin
     
//如果用户最小化窗口则将窗口
     
//隐藏并在任务栏上添加图标
    Hide;
    TrayIcon1.TrayIcon(
true);
  end
  
else
  begin
     
//如果是其它的SystemCommand
     
//消息则调用系统缺省处理函数处理之。
     DefWindowProc(self.Handle,Message.Msg,Message.WParam,Message.LParam);
  end;
end;
托盘菜单内加
procedure Tfrmmain.N1Click(Sender: TObject);
begin
    Show;
  TrayIcon1.TrayIcon(
false);
end;
原文地址:https://www.cnblogs.com/enli/p/1168820.html