现在我做了一个窗口,我把窗口属性定义成为边框了我想在上面加一个最大化最小化和关闭,如何实现?
解决方案 »
- 很奇怪的问题,今天双击FastReport那个报表,准备设计报表,关闭报表后出现:Access violation at address 004DFDAB in module 'coreide7
- access的bug?还是其它问题?
- 这种格式的数据怎么把他分开读取出来呢?
- 兄弟这个资源好像有问题,不信你试试. 就是不知道哪里有问题.
- 高分求实现软件简单的注册
- 如何观察变量在内容中分配???
- 谁用过Raize 3.06控件组?请教RzImageComboBox控件怎么用?
- 如何设置字符串回退键,高手帮忙?3x
- 有关用installsheld做安装盘的问题
- 高薪急聘高级Delphi或VC开发人员
- 如何在存储过程中定义字段的小数
- 请问如何把ImageList控件中的图形位置相互移动呢?如,我想把2与6相互交换位置,请问如何做呢?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
ButtonRect: TRect;
//工具栏上按钮的区域
procedure DrawCaptionBtn(BtnStyle: UINT);
procedure WMNcLButtonDown(var m: TMessage);message WM_NCLBUTTONDOWN;
// 当在标题栏上按下鼠标左按钮时进入该过程
procedure WMNcLButtonUp(var m: TMessage);message WM_NCLBUTTONUP;
// 当在标题栏上放开鼠标左按钮时进入该过程
procedure WMNcMouseMove(var m: TMessage);message WM_NCMOUSEMOVE;
// 当在标题栏上移动鼠标时进入该过程
procedure WMNcLButtonDBLClk(var m: TMessage); message WM_NCLBUTTONDBLCLK;
// 当在标题栏上双击鼠标左铵钮时进入该过程
procedure WMNcRButtonDown(var m: TMessage);message WM_NCRBUTTONDOWN;
// 当在标题栏上按下鼠标右按钮时进入该过程
procedure WMNcPaint(var m: TMessage);message WM_NCPAINT;
// 当画标题栏时进入该过程
procedure WMNcActivate(var m: TMessage);message WM_NCACTIVATE;
// 当标题栏在激活与非激活之间切换时进入该过程
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}procedure TForm1.DrawCaptionBtn(BtnStyle: UINT);
var
hCaptionDC: HDC;
//标题条的设备上下文
r: TRect;
begin
hCaptionDC := GetWindowDC(Self.Handle);
//注意不能用GetDC,那样的话,将得不到标题栏的设备上下文
DrawEdge(hCaptionDC, ButtonRect, BtnStyle,BF_RECT or BF_MIDDLE or BF_SOFT);
//画按钮的样子,如果BtnStyle=EDGE_RAISED,则画出的样子为凸起;
//如果BtnStyle=EDGE_SUNKEN,则画出的样子为凹下 SetBkMode(hCaptionDC, TRANSPARENT);
//设置标题栏的设备上下文为透明状态 if BtnStyle = EDGE_RAISED then
DrawText(hCaptionDC, '按钮',4, ButtonRect, DT_CENTER)
else
begin
r := ButtonRect;
OffsetRect(r, 1, 1);
DrawText(hCaptionDC, '按下',4, r, DT_CENTER);
end;
//画按钮
end;procedure TForm1.WMNcActivate(var m: TMessage);
begin
inherited;
DrawCaptionBtn(EDGE_RAISED);
end;procedure TForm1.WMNcPaint(var m: TMessage);
begin
inherited;
DrawCaptionBtn(EDGE_RAISED);
end;procedure TForm1.WMNcLButtonDBLClk(var m: TMessage);
var
p: TPoint;
begin
p.x := LOWORD(m.lParam) - Self.Left;
p.y := HIWORD(m.lParam) - Self.Top;
if not PtInRect(ButtonRect, p) then // 如果不在按钮区域内
inherited; // 执行默认的操作
end;procedure TForm1.WMNcMouseMove(var m: TMessage);
var
p: TPoint;
begin
p.x := LOWORD(m.lParam) - Self.Left;
p.y := HIWORD(m.lParam) - Self.Top;
if not PtInRect(ButtonRect, p) then // 如果不在按钮区域
DrawCaptionBtn(EDGE_RAISED)
else
inherited;
// 执行默认的操作
end;procedure TForm1.WMNcLButtonDown(var m: TMessage);
var
p: TPoint;
begin
p.x := LOWORD(m.lParam) - Self.Left;
p.y := HIWORD(m.lParam) - Self.Top;
if PtInRect(ButtonRect, p) then
// 如果按在了按钮区域
begin
Self.BringToFront;
DrawCaptionBtn(EDGE_SUNKEN);
ShowMessage('按下了按钮');
end
else
inherited;
// 执行默认的操作
end;procedure TForm1.WMNcLButtonUp(var m: TMessage);
var
p: TPoint;
begin
p.x := LOWORD(m.lParam) - Self.Left;
p.y := HIWORD(m.lParam) - Self.Top;
if PtInRect(ButtonRect, p) then
//如果在标题栏按钮区域释放鼠标
begin
DrawCaptionBtn(EDGE_RAISED);
end
else
inherited;
// 执行默认的操作
end;procedure TForm1.WMNcRButtonDown(var m: TMessage);
var
p: TPoint;
begin
p.x := LOWORD(m.lParam) - Self.Left;
p.y := HIWORD(m.lParam) - Self.Top;
if not PtInRect(ButtonRect, p) then
inherited;
//如果不在标题栏按钮区域,执行默认的操作
end;procedure TForm1.FormCreate(Sender: TObject);
begin
with ButtonRect do
begin
left := 100;
top := 4;
right := 150;
bottom := 22;
end;
end;end.