DELPHI在标题栏上增加按钮

Delphi代码

  1. unit Unit1;
  2. interface
  3. uses
  4. SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  5. Forms, Dialogs, Buttons, DdeMan, StdCtrls;
  6. type
  7. TTitleBtnForm = class(TForm)
  8. Button1: TButton;
  9. procedure FormResize(Sender: TObject);
  10. private
  11. TitleButton : TRect;
  12. procedure DrawTitleButton;
  13. {Paint-related messages}
  14. procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;
  15. procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPAINT;
  16. procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;
  17. {Mouse down-related messages}
  18. procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;
  19. procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
  20. function GetVerInfo : DWORD;
  21. end;
  22. var
  23. TitleBtnForm: TTitleBtnForm;
  24. const
  25. htTitleBtn = htSizeLast + 1;
  26. implementation
  27. {$R *.DFM}
  28. procedure TTitleBtnForm.DrawTitleButton;
  29. var
  30. bmap : TBitmap; {Bitmap to be drawn - 16 X 16 : 16 Colors}
  31. XFrame, {X and Y size of Sizeable area of Frame}
  32. YFrame,
  33. XTtlBit, {X and Y size of Bitmaps in caption}
  34. YTtlBit : Integer;
  35. begin
  36. {Get size of form frame and bitmaps in title bar}
  37. XFrame := GetSystemMetrics(SM_CXFRAME);
  38. YFrame := GetSystemMetrics(SM_CYFRAME);
  39. XTtlBit := GetSystemMetrics(SM_CXSIZE);
  40. YTtlBit := GetSystemMetrics(SM_CYSIZE);
  41. {$IFNDEF WIN32}
  42. TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
  43. YFrame - 1,
  44. XTtlBit + 2,
  45. YTtlBit + 2);
  46. {$ELSE} {Delphi 2.0 positioning}
  47. if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
  48. TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
  49. YFrame - 1,
  50. XTtlBit + 2,
  51. YTtlBit + 2)
  52. else
  53. TitleButton := Bounds(Width - XFrame - 4*XTtlBit + 2,
  54. XFrame + 2,
  55. XTtlBit + 2,
  56. YTtlBit + 2);
  57. {$ENDIF}
  58. Canvas.Handle := GetWindowDC(Self.Handle); {Get Device context for drawing}
  59. try
  60. {Draw a button face on the TRect}
  61. DrawButtonFace(Canvas, TitleButton, 1, bsAutoDetect, False, False, False);
  62. bmap := TBitmap.Create;
  63. bmap.LoadFromFile(‘c:\windows\desktop\aaa.bmp‘);
  64. with TitleButton do
  65. {$IFNDEF WIN32}
  66. Canvas.Draw(Left + 2, Top + 2, bmap);
  67. {$ELSE}
  68. if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
  69. Canvas.Draw(Left + 2, Top + 2, bmap)
  70. else
  71. Canvas.StretchDraw(TitleButton, bmap);
  72. {$ENDIF}
  73. finally
  74. ReleaseDC(Self.Handle, Canvas.Handle);
  75. bmap.Free;
  76. Canvas.Handle := 0;
  77. end;
  78. end;
  79. {Paint triggering events}
  80. procedure TTitleBtnForm.WMNCActivate(var Msg : TWMNCActivate);
  81. begin
  82. Inherited;
  83. DrawTitleButton;
  84. end;
  85. procedure TTitleBtnForm.FormResize(Sender: TObject);
  86. begin
  87. Perform(WM_NCACTIVATE, Word(Active), 0);
  88. end;
  89. {Painting events}
  90. procedure TTitleBtnForm.WMNCPaint(var Msg : TWMNCPaint);
  91. begin
  92. Inherited;
  93. DrawTitleButton;
  94. end;
  95. procedure TTitleBtnForm.WMSetText(var Msg : TWMSetText);
  96. begin
  97. Inherited;
  98. DrawTitleButton;
  99. end;
  100. {Mouse-related procedures}
  101. procedure TTitleBtnForm.WMNCHitTest(var Msg : TWMNCHitTest);
  102. begin
  103. Inherited;
  104. {Check to see if the mouse was clicked in the area of the button}
  105. with Msg do
  106. if PtInRect(TitleButton, Point(XPos - Left, YPos - Top)) then
  107. Result := htTitleBtn;
  108. end;
  109. procedure TTitleBtnForm.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
  110. begin
  111. inherited;
  112. if (Msg.HitTest = htTitleBtn) then
  113. ShowMessage(‘You pressed the new button‘);
  114. end;
  115. function TTitleBtnForm.GetVerInfo : DWORD;
  116. var
  117. verInfo : TOSVERSIONINFO;
  118. begin
  119. result:=0;
  120. verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  121. if GetVersionEx(verInfo) then
  122. Result := verInfo.dwPlatformID;
  123. {Returns:
  124. VER_PLATFORM_WIN32s Win32s on Windows 3.1
  125. VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
  126. VER_PLATFORM_WIN32_NT Windows NT }
  127. end;
  128. end.
时间: 2024-08-06 07:49:52

DELPHI在标题栏上增加按钮的相关文章

窗体皮肤实现 - 在标题栏上增加快速工具条(四)

前面做的工作就是想在标题区域增加快速工具条.前续的基础工作完成,想要在标题区域增加特殊区域都非常方便.只要在绘制时控制自定义区域需要占用标题区域多少空间,然后直接在所占位置绘制.做这个事情前,稍微把代码规整了下.所以界面皮肤处理放到一个单元中. 主要处理步骤 1.划出一个新区域(整个工具条作为一个区域) 2.处理区域检测(HitTest) 3.如果是新区域,把相应消息传给这个区域处理. 4.响应鼠标点击,执行Action 通过上述步骤就能扩展出所想要的标题区快速工具条的. 标题按钮区域是作为一个

Extjs在panel的标题栏上加按钮的方法

Ext.define('MyPanel',{ extend:'Ext.panel.Panel', xtype:'mypanel', title:'title', height:200, initComponent:function(){ var me=this; me.okBtn = new Ext.button.Button({ //按钮位置可通过此样式进行修改,如果按钮靠右显示可修改为把left改成right //采用此解决方案可以避免标题栏被撑高. style:'position: abs

Android标题栏上添加多个Menu按钮

最近项目中碰到要在Android Menu旁边再添加一个按钮,而不是点击menu按钮然后在弹出一些选项. MainActivity代码: public class MainActivity extends Activity { private static final int MENU_CONFIRM = 17; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

为Windows窗口标题栏添加新按钮

为Windows窗口标题栏添加新按钮 对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮.你想不想在Windows的窗口标题栏上添加一个新的自定义按钮,满足你的个性化需求,从而也使自己的窗口更具特色呢? 下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮. 一.实现起来要定义以下过程: 1. 定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮. 在过程中要使用win32函数GetSystemMetric

在1000屏幕增加按钮

1.增加status按钮: DATA: g_textfield LIKE smp_dyntxt. INITIALIZATION. g_textfield-icon_id = '@[email protected]'. g_textfield-icon_text = '按钮名'. g_textfield-quickinfo = '鼠标指示'. sscrfields-functxt_01 = g_textfield. AT SELECTION-SCREEN. CASE sscrfields-ucom

K3 老单序时簿增加按钮的方法以及老单序时簿插件开发

可以参考以下脚本将按钮加外购入库单的序事簿上: /*------------------------------------- 按钮NAME:外购入库单 按钮ID:10002 生产任务单ID:36 FmenuID=90 --如在外购入库序时簿增加按钮,则找到外购入库的menuID select FID,FmenuID,* from iclisttemplate where Fname LIKE '%外购入库%' --(FID=1,FmenuID=82) */-------------------

css input[type=file] 样式美化,input上传按钮美化

我们在做input文本上传的时候,html自带的上传按钮比较丑,如何对其进行美化呢?同理:input checkbox美化,input radio美化是一个道理的,后面文章会总结. 思路: input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0,然后,外层用div包裹,就实现了美化功能. 代码如下: DOM结构: <a href="javascript:;" class="a-upload"> <input type=

从下往上增加的柱状图生成动画(适用于统计类应用)

我们在一些统计,理财应用中,经常能看到很多的柱状图,用来直观的标注信息,最近一个朋友刚好在做这方面的应用,跑来问我这个怎么实现,我笑他不就是简单的实现一个动画嘛,额,然后自己去做的时候才发现各种坑. 1.所有的UIView子类中,UILabel不能实现效果 2.创建View和对View实现的动画效果要放在一个方法中 3.增加的height和减少的top(顶部y坐标)必须成2倍关系 或者 增加的height和增加的bottom(底部y坐标)必须成2倍关系 @最后,直接上代码,大家可以去试验下,我也

CSS自定义文件上传按钮

原文:CSS自定义文件上传按钮 今天一同事问我文件上传按钮的问题,情况是这样的,他页面上有3个按钮,分为左中右三个,左边的位按钮甲,右边的位按钮乙,而中间的就是个文件选择按钮,情况大概是这个样子的: 两边的按钮都有了样式,但中间的选择文件的样式死活调不出来,于是我就同他一块解决,后来经过自己设置width,height折腾无果,再求助google终于找到了解决办法,这个方法是这样的: 用一个标签套着文件域,然后调整文件域外边的元素,设置成按钮样式,然后,在把文件域"隐藏"掉(这里的隐藏