云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > delphi界面美化

delphi界面美化

  • 62 次阅读
  • 3 次下载
  • 2025/6/15 0:16:46

的Caption,类似用TMenuItem(Sender).Name则是选择菜单项的Name。

3.编写程序将动态菜单标题添加到指定的菜单顶下,并将其与OnClick()事件联系起来。将以下程序段添加到MainForm的OnCreate事件过程中,可在程序启动时完成动态菜单的动态生成: procedure TMainForm.FormCreate(Sender: TObject); var

addSubItem:TMenuItem; i:Integer; begin

for i:=0 to N do //N等于要添加的动态菜单数目,需事先定义为数值型变量,并赋值 begin

addSubItem:= TMenuItem.Create(Self); addSubItem.Name := ′A′+IntToStr(i);

addSubItem.Caption := SubMenuItemSource; // 步骤1的SubMenuItemSource应先赋值 FileOpenItem.Add(addSubItem); //在名称为FileOpenItem的菜单项下添加子菜单 addSubItem.OnClick:=MyClick; // 步骤2的MyClick(),自定义菜单要响应的事件 end end;

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

对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮。你想不想在Windows的窗口标题栏上添加一个新的自定义按钮,满足你的个性化需求,从而也使自己的窗口更具特色呢?!

下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮。 一、实现起来要定义以下过程:

1、定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮。

在过程中要使用win32函数GetSystemMetrics得到窗口的大小和标题按钮的大小;使用delphi函数Bounds定义一个矩形,这个矩形就是新按钮的位置;再定义一个小的矩形,这个矩形是为了填写文本;最后就调用delphi中比较有用的函数drawbuttonface把按钮画出来。

2、每次我们对窗口进行操作,例如,最大化操作或最小化操作,新按钮就会消失,为了解决这个问题,我们对所有的消息要进行处理,给每个消息编写一个过程对按钮进行重画。

A、定义WMNCPaint(var Msg:TWMNCPaint)过程,处理消息WM_NCPaint。

B、定义WMNCActivate(var Msg :TWMNCActivate)过程,处理消息WM_NCACTIVATE。 C、定义WMSetText(var Msg:TWMSetText)过程,处理消息WM_SETTEXT。

D、定义WMNCHitTest(var Msg :TWMNCHitTest)过程,处理消息WM_NCHITTEST。

E、定义WMNCLButtonDown(var Msg : TWMNCLButtonDown)过程,处理消息WM_NCLBUTTONDOWN。 二、具体的源程序如下:

我们结合源程序来讲述过程的实现,从中可以看出程序对win32函数的调用,以及drawbuttonface函数的使用方法。

unit Main; interface uses

Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type

TForm1 = class(TForm)

procedure FormResize(Sender: TObject); private

CaptionBtn : TRect;

procedure DrawCaptButton;

procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint;

procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIVATE; procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;

procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;

procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN; public

{ Public declarations } end; var

Form1: TForm1; implementation const

htCaptionBtn = htSizeLast + 1; {$R *.DFM}

procedure TForm1.DrawCaptButton; file://drawcapbuttton过程的具体实现 var

xFrame, yFrame, xSize,

ySize : Integer; R : TRect; begin

xFrame := GetSystemMetrics(SM_CXFRAME); yFrame := GetSystemMetrics(SM_CYFRAME);

file://把窗口的宽度置于变量xFrame,把窗口的高度置于变量yFrame xSize:= GetSystemMetrics(SM_CXSIZE); ySize:= GetSystemMetrics(SM_CYSIZE);

// 把标题栏按钮的宽度置于变量xSize,把标题栏按钮的高度置于变量ySize CaptionBtn := Bounds(Width - xFrame - 4*xSize + 2, yFrame + 2, xSize - 2, ySize - 4);

file://定义出新的标题按钮的位置,值放在变量CaptionBtn中 Canvas.Handle := GetWindowDC(Self.Handle); file://得到窗口的句柄

Canvas.Font.Name := 'Symbol'; Canvas.Font.Color := clBlue; Canvas.Font.Style := [fsBold]; Canvas.Pen.Color := clYellow; Canvas.Brush.Color := clBtnFace;

file://定义画布的字体、画笔、刷子等属性 try

DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False); file://在画布上画出定义的按钮

R := Bounds(Width - xFrame - 4 * xSize + 2, yFrame + 3, xSize - 6, ySize - 7);

file://在新按钮上画出一个小矩形 with CaptionBtn do

Canvas.TextRect(R, R.Left + 2, R.Top - 1, 'W');

file://在上面画出的小矩形上填写一个字符'w'字符 finally

ReleaseDC(Self.Handle, Canvas.Handle); Canvas.Handle := 0;

file://容错处理,如果出现异常,把句柄释放掉 end; end;

procedure TForm1.WMNCPaint(var Msg : TWMNCPaint);

//WMNCPaint过程的具体实现,该过程在绘制窗口时被调用 begin

inherited;//继承默认的消息处理程序 DrawCaptButton;//对按钮进行重画 end;

procedure TForm1. (var Msg : TWMNCActivate);

// WMNCActivate过程与WMNCPaint过程实现方法相同,该过程在窗口的非客户区要更改为激活状态或非激活状态时被调用 begin

inherited;

DrawCaptButton; end;

procedure TForm1.WMSetText(var Msg : TWMSetText);

// WMSetText过程与WMNCPaint过程实现方法相同,该过程在设置窗口的文本时被调用 begin

inherited;

DrawCaptButton; end;

procedure TForm1.WMNCHitTest(var Msg : TWMNCHitTest);

file:// WMNCHitTest过程与WMNCPaint过程实现方法相同,该过程在光标移动或鼠标按钮被按下或鼠标按钮被释放时调用 begin

inherited; with Msg do

if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then

Result := htCaptionBtn;//判断鼠标所在位置是否在新按钮的矩形范围内,如果在返回新按钮的标识值 end;

procedure TForm1.WMNCLButtonDown(var Msg : TWMNCLButtonDown);

// WMNCLButtonDown过程与WMNCPaint过程实现方法相同,当光标处于窗口非客户区范围内鼠标左键被按下时调用该过程 begin

inherited;

if (Msg.HitTest = htCaptionBtn) then

ShowMessage('你点击的是标题栏上的新按钮');

file://判断被点击的是否是新按钮,如果是显示上面的信息,在这里你可以按你的需要编写程序代码

end;

procedure TForm1.FormResize(Sender: TObject); begin

Perform(WM_NCACTIVATE, Word(Active), 0); file://如果窗口大小改变则重画标题栏 end; end.

三、程序执行结果

如图1-1所示标题栏上出现一个新按钮

图1-1

通过以上的示例过程,相信你能根据自己的具体要求,利用Delphi设计出别具特色的Windows窗口来!

用Delphi4实现风Word97格的工具栏

用过Word97的人对它的工具栏印象很深刻,因为它的风格很“酷”,同样IE4.0的工具栏也有类似的风格,Win98的出现,使这种风格的工具栏得到了推广。其实,用Delphi4很容易实现具有Word97风格的工具栏。 在Delphi4的元件选项板Additional页中,新增了Controlbar元件,此元件和Win32页中的Toolbar、Coolbar配合使用,再辅以Imagelist、Mainmenu等元件,完全可以实现具有Word97风格的工具栏。下面以一个FORM中的工具栏为例,详细介绍设计步骤:

1?从Additional页中选择Controlbar,将其放入FORM1中,设置其属性如下:Allign:=altopAutosize:=trueBevelkind:=bknone

2?从Win32页中选择Toolbar,将其放于Controlbar上,调整Toolbar的位置,使其置于最左,再调整其宽度,设置属性Edgeborders:=[],Flat:=TRUE。用鼠标右击Toolbar,在浮动菜单上选择Newbutton,重复若干次,设计好所需的按钮。

3?从Win32页中选择Imagelist元件,为FORM1设计主菜单,主菜单的设计方法同Delphi2、Delphi3。设计好主菜单后,将其属性Automerge置为TRUE。

4?最后为每一个按钮分配Tmenuitem的Name值,将每个按钮的Menuitem属性值设为所需菜单的Name值。 按F9运行程序,便可发现,设计出的工具栏已经具有Word97的风格,用鼠标在各个按钮上移动,按钮自动上浮,单击鼠标,弹出相应的菜单。需要说明的是,Mainmenu的属性Automerge置为TRUE,是为了不让主菜单出现在FORM1的最上端。工具栏的设计必须将Controlbar与Toolbar结合使用,不然得不到与Word97外观一样的工具栏。 如何隐藏和显示Windows的任务条

如果隐藏和显示Windows的任务条?仅仅调用以下的函数就可以. procedure hideTaskbar; //隐藏 var

wndHandle : THandle;

wndClass : array[0..50] of Char; begin

StrPCopy(@wndClass[0], Shell_TrayWnd);

wndHandle := FindWindow(@wndClass[0], nil); ShowWindow(wndHandle, SW_HIDE); End;

procedure showTaskbar; var

wndHandle : THandle;

搜索更多关于: delphi界面美化 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

的Caption,类似用TMenuItem(Sender).Name则是选择菜单项的Name。 3.编写程序将动态菜单标题添加到指定的菜单顶下,并将其与OnClick()事件联系起来。将以下程序段添加到MainForm的OnCreate事件过程中,可在程序启动时完成动态菜单的动态生成: procedure TMainForm.FormCreate(Sender: TObject); var addSubItem:TMenuItem; i:Integer; begin for i:=0 to N do //N等于要添加的动态菜单数目,需事先定义为数值型变量,并赋值 begin addSubItem:= TMenuItem.Create(Self); addSubIt

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com