DELPHI在标题栏上增加按钮
- unit Unit1;
- interface
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, Buttons, DdeMan, StdCtrls;
- type
- TTitleBtnForm = class(TForm)
- Button1: TButton;
- procedure FormResize(Sender: TObject);
- private
- TitleButton : TRect;
- procedure DrawTitleButton;
- {Paint-related messages}
- procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;
- procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPAINT;
- procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE;
- {Mouse down-related messages}
- procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;
- procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
- function GetVerInfo : DWORD;
- end;
- var
- TitleBtnForm: TTitleBtnForm;
- const
- htTitleBtn = htSizeLast + 1;
- implementation
- {$R *.DFM}
- procedure TTitleBtnForm.DrawTitleButton;
- var
- bmap : TBitmap; {Bitmap to be drawn - 16 X 16 : 16 Colors}
- XFrame, {X and Y size of Sizeable area of Frame}
- YFrame,
- XTtlBit, {X and Y size of Bitmaps in caption}
- YTtlBit : Integer;
- begin
- {Get size of form frame and bitmaps in title bar}
- XFrame := GetSystemMetrics(SM_CXFRAME);
- YFrame := GetSystemMetrics(SM_CYFRAME);
- XTtlBit := GetSystemMetrics(SM_CXSIZE);
- YTtlBit := GetSystemMetrics(SM_CYSIZE);
- {$IFNDEF WIN32}
- TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
- YFrame - 1,
- XTtlBit + 2,
- YTtlBit + 2);
- {$ELSE} {Delphi 2.0 positioning}
- if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
- TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
- YFrame - 1,
- XTtlBit + 2,
- YTtlBit + 2)
- else
- TitleButton := Bounds(Width - XFrame - 4*XTtlBit + 2,
- XFrame + 2,
- XTtlBit + 2,
- YTtlBit + 2);
- {$ENDIF}
- Canvas.Handle := GetWindowDC(Self.Handle); {Get Device context for drawing}
- try
- {Draw a button face on the TRect}
- DrawButtonFace(Canvas, TitleButton, 1, bsAutoDetect, False, False, False);
- bmap := TBitmap.Create;
- bmap.LoadFromFile('c:\windows\desktop\aaa.bmp');
- with TitleButton do
- {$IFNDEF WIN32}
- Canvas.Draw(Left + 2, Top + 2, bmap);
- {$ELSE}
- if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
- Canvas.Draw(Left + 2, Top + 2, bmap)
- else
- Canvas.StretchDraw(TitleButton, bmap);
- {$ENDIF}
- finally
- ReleaseDC(Self.Handle, Canvas.Handle);
- bmap.Free;
- Canvas.Handle := 0;
- end;
- end;
- {Paint triggering events}
- procedure TTitleBtnForm.WMNCActivate(var Msg : TWMNCActivate);
- begin
- Inherited;
- DrawTitleButton;
- end;
- procedure TTitleBtnForm.FormResize(Sender: TObject);
- begin
- Perform(WM_NCACTIVATE, Word(Active), 0);
- end;
- {Painting events}
- procedure TTitleBtnForm.WMNCPaint(var Msg : TWMNCPaint);
- begin
- Inherited;
- DrawTitleButton;
- end;
- procedure TTitleBtnForm.WMSetText(var Msg : TWMSetText);
- begin
- Inherited;
- DrawTitleButton;
- end;
- {Mouse-related procedures}
- procedure TTitleBtnForm.WMNCHitTest(var Msg : TWMNCHitTest);
- begin
- Inherited;
- {Check to see if the mouse was clicked in the area of the button}
- with Msg do
- if PtInRect(TitleButton, Point(XPos - Left, YPos - Top)) then
- Result := htTitleBtn;
- end;
- procedure TTitleBtnForm.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
- begin
- inherited;
- if (Msg.HitTest = htTitleBtn) then
- ShowMessage('You pressed the new button');
- end;
- function TTitleBtnForm.GetVerInfo : DWORD;
- var
- verInfo : TOSVERSIONINFO;
- begin
- result:=0;
- verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
- if GetVersionEx(verInfo) then
- Result := verInfo.dwPlatformID;
- {Returns:
- VER_PLATFORM_WIN32s Win32s on Windows 3.1
- VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
- VER_PLATFORM_WIN32_NT Windows NT }
- end;
- end.
DELPHI在标题栏上增加按钮的更多相关文章
- delphi编程实现为Windows窗口标题栏添加新按钮
下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮. 一.实现起来要定义以下过程: 1. 定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮. 在过程中要使用w ...
- Android标题栏上添加多个Menu按钮
最近项目中碰到要在Android Menu旁边再添加一个按钮,而不是点击menu按钮然后在弹出一些选项. MainActivity代码: public class MainActivity exten ...
- C#点击按钮用DataGridView动态增加行、删除行,增加按钮列
原来有一行: 点击添加,在下面增加同样的一行 新增加的行有一列删除按钮,点击某行的删除按钮时,删除当前行 方法: 哈哈,我果然好聪明啊 1.文本框.文本框.添加按钮 2.一个DataGridView( ...
- 为Windows窗口标题栏添加新按钮
为Windows窗口标题栏添加新按钮 对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮.你想不想在Windows的窗口标题栏上添加一个新的自 ...
- Delphi中 为DBNavigator的按钮加中文
Delphi中 为DBNavigator的按钮加中文 /*Delphi中数据库控件DBNavigator使用起来不错,但是按钮上“+”.“-”等含义对于中国的用户不习惯,甚至不知道是什么含义.改成相应 ...
- Mac OS X:在标题栏上显示目录完整路径
众所周知mac的finder是不带路径显示的,你进入某个文件夹只会显示当前文件夹的名字而已.虽然你可以在finder的菜单栏中点“显示”-“显示路径栏”把路径栏调出来,但是这样只会不必要的增加find ...
- 一个漂亮的上传按钮input[type=file]
;;} <div class="input-group xj-file xj-panel-top"> <span class="input-group- ...
- input上传按钮美化
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- css input[type=file] 样式美化,input上传按钮美化
css input[type=file] 样式美化,input上传按钮美化 参考:http://www.haorooms.com/post/css_input_uploadmh
随机推荐
- php hash_hmac 与python hmac 区别
使用 HMAC 方法生成带有密钥的哈希值 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = fal ...
- win下如何查看那个网络端口被那个应用程序使用
在运行里面键入cmd打开命令行窗口. 在命令行窗口键入命令: netstat -ano 第一和第二列是自己网络的端口和外网连接的端口,pid:(全称Process Identification ...
- GAN网络
http://www.sohu.com/a/130252639_473283 高分辨率图像重建 https://zhuanlan.zhihu.com/p/25201511 生成式对抗网络GAN有哪些最 ...
- eclipse 下安装 lombok.jar
lombok是一个java 开发插件,可以用来简化代码, 1. 下载lombok.jar https://projectlombok.org/download 2 将lombok.jar文件放在ecl ...
- jqgrid的排序问题
今天是本人解决的一个小bug 所以写的粗略些. 问题是这样的ORDER BY a.$sidx $sord 当时本人排序时候没用jqgrid的默认排序(可能今天这个大家看不懂,很抱歉啊各位,今天主要 ...
- webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。
http://www.runoob.com/nodejs/nodejs-path-module.html
- 4、手把手教React Native实战之flexbox布局(伸缩属性)
###伸缩项目的属性 1.order 定义项目的排列顺序,数值越小,排列越靠前,默认值为0,语法为:order:整数值 2.flex-grow 定义伸缩项目的放大比例,默认值为0,即表示如果存在剩余空 ...
- CGContextRef用法
本文转载至 http://blog.csdn.net/perfect_promise/article/details/7660220 quartz 是主要的描画接口,支持基于路径的描画. 抗锯齿渲染. ...
- python之list去重
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: 复制代码代码如下: ids = [1,2,3,3,4,2,3,4,5,6,1]news_ids = ...
- IIS部署ASP.NET MVC (4.0)网站出现的错误
(1)无法读取配置节“system.web.extensions”,因为它缺少节声明 在IIS中,在基本设置中,将程序池选择为ASP.NET 4.0即OK! (2)由于 Web 服务器上的“ISAPI ...