MenuExt
- Active · last change 3-5-2026
- ★ 1 on GitHub
README
[秋风原创控件] QQ:315795176
- 将PopupMenu和MainMenu自绘单元合并,统一使用PopupMenu的样式和用法。


- 2026-03-04 增加零配置使用方式
只需要uses添加MenuExt单元,程序运行后,MainMenu1 和 PopupMenu1 会自动应用 DefaultMenuStyle 样式,并显示为自定义绘制的菜单栏和弹出菜单,无需任何额外的初始化代码。
当然也可以使用之前的方法自定义样式。
新的demo:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Menus,
MenuExt; // 【只需引用这里】
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
PopupMenu1: TPopupMenu;
// 无需任何 FormCreate 代码
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
end.使用demo:
unit menu_unit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, clipbrd,
Menus, Messages, Buttons, ExtCtrls, ComCtrls, MATH, Spin, CheckLst, LazUTF8,
LazUtils, cp936, LConvEncoding, LazUnicode, LazUTF16, LazSysUtils,
LazUtilities, Types, Grids, MenuExt;// StyledMenuUnit, PopupMenuExt;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
MainMenu1: TMainMenu;
Memo1: TMemo;
MenuItem1: TMenuItem;
MenuItem10: TMenuItem;
MenuItem11: TMenuItem;
MenuItem12: TMenuItem;
MenuItem13: TMenuItem;
MenuItem14: TMenuItem;
Separator2: TMenuItem;
Separator1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MenuItem5: TMenuItem;
MenuItem6: TMenuItem;
MenuItem7: TMenuItem;
MenuItem8: TMenuItem;
MenuItem9: TMenuItem;
Panel1: TPanel;
PopupMenu1: TPopupMenu;
procedure FormCreate(Sender: TObject);
private
MyMenuStyle: TPopupMenuStyle;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
// 1. 配置样式
MyMenuStyle := DefaultMenuStyle; // 获取默认值
MyMenuStyle.FontName := 'Microsoft YaHei'; // 微软雅黑,Linux下如无此字体会自动降级
MyMenuStyle.FontSize := 10; // 字体变大
MyMenuStyle.FontColor := clBlack;
MyMenuStyle.BgColor := $00F0F0F0; // 浅灰背景
MyMenuStyle.SelectedBgColor := $00FFCC00; // 选中时背景
MyMenuStyle.SelectedFontColor := clBlack; // 选中时黑色字体
MyMenuStyle.ItemPadding := 6; // 增加垂直间距
// 2. 应用样式到 MainMenu1和PopupMenu1
PopupMenu1.ApplyStyle(@MyMenuStyle);
MainMenu1.ApplyStyle(@MyMenuStyle);
end;
end.
