Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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实现突出显示的工具栏图标?_Delphi_User Interface_Menu_Toolbar - Fatal编程技术网

如何使用Delphi实现突出显示的工具栏图标?

如何使用Delphi实现突出显示的工具栏图标?,delphi,user-interface,menu,toolbar,Delphi,User Interface,Menu,Toolbar,我想在工具栏图标的关联操作将其“checked”属性设置为true时突出显示工具栏图标。我希望以类似于Microsoft Office 2003的方式执行此操作,例如,查看此图像中的粗体和左对齐图标: 绘制图像时,图像周围有一个框,背景已更改为橙色 如何使用Delphi 2009实现这一点 作为奖励,是否还有一种方法可以对相关项目菜单中的图标执行相同的操作?e、 g.标尺和标记条目如下所示: 后续行动: 谢谢安德烈亚斯,你对我的问题给出了一个简单而正确的答案。作为一名转换为Delphi 2

我想在工具栏图标的关联操作将其“checked”属性设置为true时突出显示工具栏图标。我希望以类似于Microsoft Office 2003的方式执行此操作,例如,查看此图像中的粗体和左对齐图标:

绘制图像时,图像周围有一个框,背景已更改为橙色

如何使用Delphi 2009实现这一点

作为奖励,是否还有一种方法可以对相关项目菜单中的图标执行相同的操作?e、 g.标尺和标记条目如下所示:


后续行动:

谢谢安德烈亚斯,你对我的问题给出了一个简单而正确的答案。作为一名转换为Delphi 2009的Delphi 4程序员,我对Delphi 5到Delphi 7中添加的VCL不够熟悉,因此TActionManager、TActionToolbar及其工作方式不在我的Delphi词汇表中。这是基于Delphi使用类似于Microsoft O/s主题的样式的能力

然而,有了你的答案,以及一些使用它的研究,我确认我不想这样做。一个有启发性的Embarcadero主题:弹出菜单:下面的Peter贡献了他的专业知识,这让我意识到我根本不想改变XP主题,因为这会对Vista和Windows7用户产生影响,让他们回到青铜时代

这里真正的罪魁祸首是O/S主题希望您尊重某些事情。德尔福试图遵守规则。我可以回到XP,XP风格/主题和XP颜色地图。在此模式下,选中的项目将被点亮。这就是我想要的——突出显示选中的项目。我以Office2003为例,因为它是我想要的那种hilighting。但我真的不想完全改变主题,强迫我的节目有一个全新的面貌。对于Vista和Windows7用户来说,这尤其会让事情看起来不自然

理想的情况是,如果我可以有另一组图像,在检查对象时应用。。。但是没有“CheckedImages”属性。或者,如果选中图像,则通过编程或自动修改图像的方式(例如,像禁用的图像一样,获取其启用图像的灰度版本)


如果有任何方法可以实现此功能或其他同样有效的功能,而不改变我程序的整体外观,我仍然不介意听取任何人的意见。

在表单中添加一个
TActionManager
,并创建一些操作(例如,粗体、斜体和下划线)。确保为每个操作将
AutoCheck
属性设置为true。然后添加一个
战术工具栏
。双击动作管理器,然后将三个动作拖动到工具栏。现在将
TXPColorMap
添加到表单中,并将其分配给操作管理器。同时添加一个
TImageList
并添加粗体、斜体和下划线图标(来自
C:\ProgramFiles(x86)\Common Files\CodeGear Shared\Images\GlyFX\icons\BMP\16x16
)。将图像列表分配给操作管理器

将工具栏图标设置为仅显示图示符而不显示标题。最后,将ActionManager的
Style
属性设置为
XP Style
。最终的结果就是你所追求的


在不改变整个主题的情况下,我认为这可能是一个有点得体的方法:

  • 向ImageList添加额外的图像,以便对于给定的操作,有两个(或更多)图像可供选择

  • 将ImageIndex更改为备选图像,而不是将“checked”属性更改为true或false,例如:

    if WS = 1 then begin
      ElTree.Align := alTop;
    //  TileTopBottomAction.Checked := true;  --- take this out
    //  TileLeftRightAction.Checked := false;  --- take this out
      TileTopBottomAction.ImageIndex := 47;  { hilighted image }
      TileLeftRightAction.ImageIndex := 14;  { regular image }
    end 
    else begin
      ElTree.Align := alLeft;
    //  TileTopBottomAction.Checked := false;  --- take this out
    //  TileLeftRightAction.Checked := true;  --- take this out
      TileTopBottomAction.ImageIndex := 13;  { regular image }
      TileLeftRightAction.ImageIndex := 48;  { hilighted image }
    end;
    
  • 现在,工具栏上的图像将如下所示:

    就像菜单上的这个:

    这个方法的优点在于它也可以在菜单上工作,并且你可以有多个图像来表示你想要的东西。而且,它不会破坏程序所采用的主题(XP、Vista、Windows7等)


    此方法的缺点是:您只能使用16x16图像区域,并且无法在其周围绘制超出这些限制的框,当您将“checked”属性设置为true时会发生这种情况

    我刚刚发现,人们也可以使用普通的
    t工具栏,将
    DrawingStyle
    设置为
    dsGradient


    标准的
    TToolbar
    TMainMenu
    tOpupMenu
    不是已经这样做了吗?而且他们甚至比那些你有截图的还要好,因为他们是用本地的方式做的!我个人使用Toolbar2000+SpTBX,与Toolbar和TActionManager组件相比,我更喜欢它们。+1干得好!看到您推荐内置组件而不是自定义组件,有些惊讶!;-)@大卫:我也是(或者,本地Windows控件)。但这很好地回答了他的问题,我不喜欢这样。我喜欢在所选/下拉项周围有一个清晰的矩形。这是一个更好、更简单的解决方案。它不会像其他方法一样将整个主题更改为XP。遗憾的是,这些小功能中的一些隐藏在工具栏的50多个属性中,很难找到。