首页 > 其他分享 >delphi 利用TPopupMenu做一个更换主题的功能

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

时间:2022-10-06 19:45:20浏览次数:65  
标签:菜单 TMenuItem delphi ThemeName TStyleManager StyleNames popItem 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;

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

 

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

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

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

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

 

 

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

 

标签:菜单,TMenuItem,delphi,ThemeName,TStyleManager,StyleNames,popItem,TPopupMenu,更换
From: https://www.cnblogs.com/yoooos/p/16758271.html

相关文章