TBottom.pas
上传用户:sunrenlu
上传日期:2007-01-08
资源大小:199k
文件大小:5k
源码类别:

Internet/网络编程

开发平台:

Delphi

  1. unit main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, 
  5. Graphics, Controls, Forms, Dialogs,
  6.   StdCtrls, Menus;
  7. type
  8.   TForm1 = class(TForm)
  9.     procedure FormCreate(Sender: TObject);
  10.     procedure FormDestroy(Sender: TObject);
  11.   private
  12.     { Private declarations }
  13.     TBRect: TRect;   // Caption Bar Button Rectangle
  14.     CBBtnFont: TFont;   // Caption Bar Button Font
  15.     procedure DrawCaptionBtn(uEdge: UINT);
  16.     // 当在标题栏上按下鼠标左按钮时进入该过程
  17. procedure WMNcLButtonDown(var m: TMessage); 
  18. message WM_NCLBUTTONDOWN;
  19.     // 当在标题栏上放开鼠标左按钮时进入该过程
  20. procedure WMNcLButtonUp(var m: TMessage); 
  21. message WM_NCLBUTTONUP;
  22.     // 当在标题栏上移动鼠标时进入该过程
  23. procedure WMNcMouseMove(var m: TMessage); 
  24. message WM_NCMOUSEMOVE;
  25.     // 当在标题栏上双击鼠标左铵钮时进入该过程
  26. procedure WMNcLButtonDBLClk
  27. (var m: TMessage); message WM_NCLBUTTONDBLCLK;
  28.     // 当在标题栏上按下鼠标右按钮时进入该过程
  29. procedure WMNcRButtonDown(var m: TMessage); 
  30. message WM_NCRBUTTONDOWN;
  31.     // 当画标题栏时进入该过程
  32. procedure WMNcPaint(var m: TMessage); 
  33. message WM_NCPAINT;
  34.     // 当标题栏在激活与非激活之间切换时进入该过程
  35. procedure WMNcActivate(var m: TMessage); 
  36. message WM_NCACTIVATE;
  37.   public
  38.     { Public declarations }
  39.   end;
  40. var
  41.   Form1: TForm1;
  42. implementation
  43. {$R *.DFM}
  44. procedure TForm1.DrawCaptionBtn(uEdge: UINT);
  45. var
  46.    hCaptionDC: HDC; // 标题条Device Context
  47.    hOldFont: HFONT; // 原来的字体
  48.    r: TRect;
  49. begin
  50.      hCaptionDC := GetWindowDC(Self.Handle);
  51.  // 注意不能用GetDC,那样的话,将得不到标题栏
  52.  // 的设备上下文
  53.      //画按钮的样子,如果uEdge=EDGE_RAIS,
  54. 则画出的样子为凸起;如果
  55. //uEdge=EDGE_SUNKEN,则画出的样子为凹下。
  56.      DrawEdge(hCaptionDC, TBRect, uEdge, 
  57. BF_RECT or BF_MIDDLE or
  58.             BF_SOFT); 
  59.      //设置标题栏的设备上下文为透明状态
  60.      SetBkMode(hCaptionDC, TRANSPARENT);
  61.      //设置标题栏设备上下文的字体
  62.      hOldFont:= SelectObject(hCaptionDC, CBBtnFont.Handle);
  63.      //画按钮
  64.      if uEdge = EDGE_RAISED then
  65.         DrawText(hCaptionDC, 'Caption Bar Button', 
  66. 18, TBRect, DT_CENTER)
  67.      else begin
  68.         r := TBRect;
  69.         OffsetRect(r, 1, 1); 
  70.         DrawText(hCaptionDC, 'Caption Bar Button', 18, r, DT_CENTER);
  71.      end;
  72.      //还原为原来的字体
  73.      SelectObject(hCaptionDC, hOldFont);
  74. end;
  75. procedure TForm1.WMNcActivate(var m: TMessage);
  76. begin
  77.      inherited;
  78.      DrawCaptionBtn(EDGE_RAISED);
  79. end;
  80. procedure TForm1.WMNcPaint(var m: TMessage);
  81. begin
  82.      inherited;
  83.      DrawCaptionBtn(EDGE_RAISED);
  84. end;
  85. procedure TForm1.WMNcLButtonDBLClk(var m: TMessage);
  86. var
  87.    p: TPoint;
  88. begin
  89.      p.x := LOWORD(m.lParam) - Self.Left;
  90.      p.y := HIWORD(m.lParam) - Self.Top;
  91.      if not PtInRect(TBRect, p) then // 如果不在按钮区域内
  92.         inherited;  // 执行默认的操作
  93. end;
  94. procedure TForm1.WMNcMouseMove(var m: TMessage);
  95. var
  96.    p: TPoint;
  97. begin
  98.      p.x := LOWORD(m.lParam) - Self.Left;
  99.      p.y := HIWORD(m.lParam) - Self.Top;
  100.      if not PtInRect(TBRect, p) then // 如果不在按钮区域
  101.         DrawCaptionBtn(EDGE_RAISED)
  102.      else
  103.         inherited; // 执行默认的操作
  104. end;
  105. procedure TForm1.WMNcLButtonDown(var m: TMessage);
  106. var
  107.    p: TPoint;
  108. begin
  109.      p.x := LOWORD(m.lParam) - Self.Left;
  110.      p.y := HIWORD(m.lParam) - Self.Top;
  111.      if PtInRect(TBRect, p) then  // 如果按在了按钮区域
  112.      begin
  113.         Self.BringToFront;
  114.         DrawCaptionBtn(EDGE_SUNKEN);
  115.      end
  116.      else
  117.         inherited; // 执行默认的操作
  118. end;
  119. procedure TForm1.WMNcLButtonUp(var m: TMessage);
  120. var
  121.    p: TPoint;
  122. begin
  123.      p.x := LOWORD(m.lParam) - Self.Left;
  124.      p.y := HIWORD(m.lParam) - Self.Top;
  125.      if PtInRect(TBRect, p) then // 
  126. 如果在标题栏按钮区域释放鼠标
  127.      begin
  128.         DrawCaptionBtn(EDGE_RAISED);
  129.      end
  130.      else
  131.         inherited; // 执行默认的操作
  132. end;
  133. procedure TForm1.WMNcRButtonDown(var m: TMessage);
  134. var
  135.    p: TPoint;
  136. begin
  137.      p.x := LOWORD(m.lParam) - Self.Left;
  138.      p.y := HIWORD(m.lParam) - Self.Top;
  139.      if not PtInRect(TBRect, p) then // 如果不在标题栏按钮区域
  140.         inherited;  // 执行默认的操作
  141. end;
  142. procedure TForm1.FormCreate(Sender: TObject);
  143. begin
  144.      // 这个大小大家可以得用GetSystemMetrics
  145. 函数来进行更精确的计算。这里
  146.      // 只是用来示例
  147.      with TBRect do
  148.      begin
  149.           left := 100;
  150.           top  := 6;
  151.           right := 450;
  152.           bottom := 20;
  153.      end;
  154.      // 标题栏按钮字体。
  155.      CBBtnFont:= TFont.Create;
  156.      with CBBtnFont do
  157.      begin
  158.           Name := '宋体';
  159.           Size := 9;
  160.           Color := clRed;
  161.      end;
  162. end;
  163. procedure TForm1.FormDestroy(Sender: TObject);
  164. begin
  165.      CBBtnFont.Free;
  166. end;
  167. end.