• 欢迎光临~

delphi 利用TPopupMenu做一个更换主题的功能

开发技术 开发技术 2022-10-06 次浏览

效果图:

delphi 利用TPopupMenu做一个更换主题的功能

核心代码:

use
  Vcl.Themes;


procedure TForm1.FormCreate(Sender: TObject);
var
i:integer; popItem:TMenuItem; begin
//动态生成右键菜单与绑定事件
//TStyleManager样式管理器,不用声明.TStyleManager.StyleNames 返回一个皮肤数组. for i := Low(TStyleManager.StyleNames) to High(TStyleManager.StyleNames) do begin popItem := TMenuItem.Create(PopupMenu1); //定义一个菜单 popItem.Caption := TStyleManager.StyleNames[i]; //赋值 popItem.OnClick := SelectTheme; //绑定事件 PopupMenu1.Items.Add(popItem); // 创建菜单 end; end;

//自定义过程SelectTheme
procedure TForm1.SelectTheme(sender: TObject); var ThemeName: string; begin ThemeName := (sender as TMenuItem).Caption;  //取得点击菜单的caption ThemeName := StringReplace(ThemeName, '&', '', [rfReplaceAll]); //这一步很重要. TStyleManager.TrySetStyle(ThemeName);  //设置主题 end;

请注意上面一行红色的代码,其作用是把字符串中的 & 符号替换为空.如果没有这一行,就会出现如下错误

delphi 利用TPopupMenu做一个更换主题的功能

 

可能有些朋友不知道为什么要替换,提示信息上明明说的是"Luna"主题没有找到,跟替换&符号好像没什么关系.

这里要科普一下D里面的一些规则:

请留意下图中底部带下划线的字母.在D的菜单设置规则里,caption属性里面的&+字母表示设置快捷方式,比如第一行的windows,它的caption实际上是 : &Windows,又如第三行,它实际为: L&gua Light Slate

所以,现在再回才头去看那个出错信息,就明白里面的意思了吧.

delphi 利用TPopupMenu做一个更换主题的功能

 

 

最后说一下,TStyleManager.StyleNames 这个数组的第一个元素为Windows.如果你要过虑掉它,有很多种方法.

 

程序员灯塔
转载请注明原文链接:delphi 利用TPopupMenu做一个更换主题的功能
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com