Delphi 如何使TJvCaptionPanel按钮的外观现代化?
我在Delphi 10.4中使用Delphi 如何使TJvCaptionPanel按钮的外观现代化?,delphi,jvcl,delphi-10.4-sydney,Delphi,Jvcl,Delphi 10.4 Sydney,我在Delphi 10.4中使用TJvCaptionPanel来显示带有标题和按钮的面板: (TJvCaptionPanel是开源JEDI可视化组件库的一部分,可从GetIt获得) 这是JvCaptionPanel1对象实例的对象代码,因此您可以将其粘贴到表单设计器中: object JvCaptionPanel1: TJvCaptionPanel Left = 560 Top = 79 Width = 210 Height = 306 Align = alRight
TJvCaptionPanel
来显示带有标题和按钮的面板:
(TJvCaptionPanel
是开源JEDI可视化组件库的一部分,可从GetIt获得)
这是JvCaptionPanel1
对象实例的对象代码,因此您可以将其粘贴到表单设计器中:
object JvCaptionPanel1: TJvCaptionPanel
Left = 560
Top = 79
Width = 210
Height = 306
Align = alRight
Buttons = [capClose, capHelp]
Caption = 'My Test Caption'
CaptionPosition = dpTop
CaptionFont.Charset = DEFAULT_CHARSET
CaptionFont.Color = clWhite
CaptionFont.Height = -13
CaptionFont.Name = 'Tahoma'
CaptionFont.Style = [fsBold]
FlatButtons = True
Icon.Data = {
0000010001001010000001002000680400001600000028000000100000002000
0000010020000000000040040000000000000000000000000000000000000000
00000000000000000000777777A4777777E07777773177777763777777887777
7788777777617777772D777777DF777777A80000000000000000000000000000
00000000000000000000777777C5787878FE7F7F7FFDA9A9A9FDC0C0C0FDBFBF
BFFDA8A8A8FD7F7F7FFD787878FE777777C90000000000000000000000000000
0000000000007676760E777777CBABABABFDF4F4F4FDFDFDFDFDFDFDFDFDFDFD
FDFDFDFDFDFDF4F4F4FDA9A9A9FD777777C77777770C00000000000000000000
000000000000777777A8B0B0B0FDFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
FDFDFDFDFDFDEADCCEFCF2EAE2FCAEAEAEFD777777A300000000000000000000
000076767635898989FDF9F9F9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD
FDFDDDC4ACFCCDA782FCFCFCFCFCF8F8F8FD888888FD77777730000000000000
00007777778EBEBEBEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCD5B5
96FCBE8D5CFCF9F6F3FCFDFDFDFDFDFDFDFDBCBCBCFD77777789000000000000
0000777777BDDBDBDBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDD7B99BFCB883
4DFCF3EBE3FCFDFDFDFDFDFDFDFDFDFDFDFDD9D9D9FD777777B7000000000000
0000777777C6E0E0E0FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDC59A6FFCDEC7
AFFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDDEDEDEFD777777C1000000000000
0000777777AACFCFCFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCAA37BFCE4D0
BDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDCCCCCCFD777777A4000000000000
000077777766A4A4A4FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDD1AF8DFCE8D8
C8FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDA2A2A2FD77777761000000000000
00007372710C797979E7DFDFDFFDFDFDFDFDFDFDFDFDFDFDFDFDDBC2A8FCF0E7
DEFCFDFDFDFDFDFDFDFDFDFDFDFDDDDDDDFD787878E378767509000000000000
0000A47547088376694C848484FBE5E5E5FCFDFDFDFCFDFDFDFCF1E8E0FCFBFA
F9FCFDFDFDFCFDFDFDFCE4E4E4FC838383FA80766C47A2764A08000000000000
0000B1773C9FA7764445827568557B7B7BF1B6B6B6FCE8E8E8FCFCFCFCFCFCFC
FCFCE7E7E7FCB5B5B5FC7B7B7BF07E756B51A476483DB1773CA8000000000000
0000B1773CB7B1773CF5AB77425F8F765C1D7B76718F777676DD7A7A7AFC7A7A
7AFC767676DC7A76728D8C755F1BA8764457B1773DF2B1773CCA000000000000
0000B1763B3CB1773CF5B2783DFEB1773DC2A9774357000000005D5D5D065D5D
5D0600000000A8774552B0773DBCB2783DFEB2783DFCB1773C56000000000000
000000000000B1773B2FB1773CBAB1773CE6B1773C6F00000000000000000000
000000000000B1773C68B1773CEFB1773CD1B1763B470000000000000000E007
0000E0070000C0030000C0030000800100008001000080010000800100008001
0000800100008001000080010000800100008001000082410000C3C30000}
OutlookLook = False
Resizable = False
TabOrder = 2
OnButtonClick = JvCaptionPanel1ButtonClick
end
尽管从上面的屏幕截图中可以看到,JvCaptionPanel1.FlatButtons=True,但这些按钮具有老式的“石器时代”“Atari”像素化外观:
这与我的应用程序的其他现代外观形成对比
有没有可能“现代化”按钮的外观,使他们看起来更“现代”?如何做到这一点?如果我是你,我会创建一个自定义控件:
单元标题;
接口
使用
窗口、消息、系统工具、类型、UIType、类、图形、控件、,
StdCtrls、表单;
类型
TpanelOption=class(TCustomControl)
私有的
FTextColor:TColor;
FCloseBtnHot:布尔值;
fclosebtendown:布尔值;
FCloseBtnClicked:TNotifyEvent;
程序SetTextColor(常量值:TColor);
功能关闭正确:TRect;
程序文件关闭;
受保护的
程序漆;推翻
程序调整;推翻
过程MouseMove(Shift:tshift状态;X:Integer;Y:Integer);推翻
过程CMTextChanged(var消息:TMessage);消息CM_text已更改;
程序CMMouseLeave(var消息:TMessage);消息CM_MOUSELEAVE;
过程鼠标向下移动(按钮:TMouseButton;Shift:tShift状态;X:整数;
Y:整数);推翻
过程鼠标(按钮:TMouseButton;Shift:tShift状态;X:整数;
Y:整数);推翻
公众的
构造函数创建(AOwner:TComponent);推翻
出版
属性对齐;
地产锚;
比迪莫德财产;
属性标题;
属性颜色;
属性TextColor:TColor读取FTextColor写入SetTextColor;
财产限制;
属性Ctl3D;
不动产码头;
双重缓冲的财产;
房地产开发商;
房地产开发;
属性DragMode;
启用属性;
属性字体;
属性填充;
财产背景;
比迪莫德财产;
属性父颜色;
房地产开发;
双重缓冲的属性;
属性ParentFont默认为True;
属性提示;
属性弹出菜单;
属性显示提示;
财产秩序;
财产禁令;
财产接触;
有形财产;
属性元素;
以前的财产;
财产状况;
属性OnClick;
属性OnCloseBtnClick:TNotifyEvent读取fclosebtnclick写入fclosebtnclick;
属性OnContextPopup;
属性单击;
财产损失;
财产损失;
财产保险;
财产保险;
财产保险;
财产税;
财产所有权人;
不动产退出;
房地产投资;
不动产OnGetSiteInfo;
房地产开发;
房地产价格下跌;
房屋中心的物业;
休假期间的财产;
动产;
房地产抵押;
StartDock上的财产;
启动时的属性;
恩多克的财产;
结束;
程序登记册;
实施
使用
数学;
函数刻度(X:整数):整数;
开始
结果:=MulDiv(X,Screen.PixelsPerInch,96);
结束;
{TPanelCaption}
函数TPanelCaption.CloseBtnRect:TRect;
开始
结果:=Rect(ClientWidth-ClientHeight,0,ClientWidth,ClientHeight);
结束;
过程TPanelCaption.CMMouseLeave(var消息:TMessage);
开始
如果FCloseBtnHot或FCloseBtnown,则
开始
FCloseBtnHot:=假;
fclosebtendown:=假;
无效竖立(手柄、闭合正确、错误);
结束;
结束;
过程TPanelCaption.CMTextChanged(变量消息:TMessage);
开始
继承;
使无效
结束;
构造函数tPanelOption.Create(所有者:TComponent);
开始
继承;
颜色:=clactivecation;
FTextColor:=clCaptionText;
结束;
程序TPanelCaption.doclosebtinclicked;
开始
如果已分配(FCloseBtnClicked),则
FCloseBtnClicked(自我);
结束;
程序tPanelOption.MouseDown(按钮:tMouse按钮;Shift:tShift状态;X,
Y:整数);
开始
继承;
如果按钮=英尺,则
开始
fclosebtendown:=CloseBtnRect.Contains(点(X,Y));
如果FClosebtendown,则
无效竖立(手柄、闭合正确、错误);
结束;
结束;
过程TPanelCaption.MouseMove(Shift:TShiftState;X,Y:Integer);
变量
LCloseButtonHot:布尔值;
开始
LCloseButtonHot:=CloseBtnRect.Contains(点(X,Y));
如果LCloseButtonHot FCloseBtnHot,则
开始
FCloseBtnHot:=LCloseButtonHot;
无效竖立(手柄、闭合正确、错误);
结束;
结束;
程序TPanelCaption.MouseUp(按钮:TMouseButton;换档:tShift状态;X,
Y:整数);
开始
继承;
如果FClosebtendown,则
开始
fclosebtendown:=假;
无效竖立(手柄、闭合正确、错误);
如果CloseBtnRect.包含(点(X,Y)),则
文件关闭;
结束;
结束;
过程GetActualTextHeight(DC:HDC;out H:Integer);
变量
m:TTextMetric;
开始
如果GetTextMetrics(DC,m),那么
H:=m.tM高度-m.tM下降-m.tM外部领先-m.tM内部领先
其他的
H:=刻度(20);
结束;
程序TPanelCaption.油漆;
变量
R:TRect;
S:字符串;
XHeight:整数;
sizereduce:整数;
开始
继承;
Canvas.Brush.Color:=颜色;
Canvas.Font.Assign(字体);
Canvas.Font.Color:=FTextColor;
R:=ClientRect;
十二月(右,八度);
Canvas.FillRect(R);
S:=#32+标题;
TextRect(R,S,[tfSingleLine,tfLeft,tfVerticalCenter,tfEndEllipsis]);
R:=关闭正确;
Canvas.Brush.Color:=IfThen(FCloseBtnHot,IfThen(FCloseBtnDown,clBlack,clWhite),Color);
Canvas.FillRect(R);
GetActualTextHeight(Canvas.Handle,XHeight);
尺寸缩减率:=R.高度-xHight;
中频施胶机