Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何使TJvCaptionPanel按钮的外观现代化?_Delphi_Jvcl_Delphi 10.4 Sydney - Fatal编程技术网

Delphi 如何使TJvCaptionPanel按钮的外观现代化?

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

我在Delphi 10.4中使用
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;
中频施胶机