In meinem kzTheming Projekt nutze ich folgenden Code um ein Menu Eintrag automatisch mit Styles zu versorgen und ein Event zum wechseln aufzurufen.
Hiermit fülle ich einen Menü Eintrag mit allen Styles die ich mitgegeben habe:
Delphi-Quellcode:
procedure kzTheme.AddNativeStyle(const AMenuItem: TMenuItem);
procedure AddMenuEntry(const ACaption: string; const AValue: Integer);
var
Item: TMenuItem;
begin
Item := TMenuItem.Create(FMenuItem);
Item.Caption := ACaption;
Item.OnClick := NativeStyleClick;
Item.AutoCheck := False;
Item.RadioItem := False;
Item.Checked := TStyleManager.ActiveStyle.Name = ACaption;
if ((AValue) mod 10) = 0 then
Item.Break := mbBarBreak;
FMenuItem.Add(Item);
end;
var
Arr: TArray<string>;
SystemStyle: string;
FoundStyle: String;
i: Integer;
begin
FMenuItem := AMenuItem;
FMenuItem.Clear;
FMenuItem.AutoLineReduction := maAutomatic;
Arr := TStyleManager.StyleNames;
TArray.Sort<string>(arr);
SystemStyle := TStyleManager.SystemStyle.Name;
AddMenuEntry(SystemStyle, 0);
i := 1;
for FoundStyle in Arr do
begin
if FoundStyle <> SystemStyle then
begin
AddMenuEntry(FoundStyle, i);
Inc(i);
end;
end;
end;
Diese Methode wird für jeden Menu Eintrag aufgerufen:
Delphi-Quellcode:
procedure kzTheme.NativeStyleClick(Sender: TObject);
var
StyleName: String;
i: Integer;
begin
StyleName := StripHotkey(TMenuItem(Sender).Caption);
TStyleManager.SetStyle(StyleName);
(Sender as TMenuItem).Checked := true;
for i := 0 to Pred(FMenuItem.Count) do
if (not FMenuItem.Items[i].Equals(Sender)) then
FMenuItem.Items[i].Checked := false;
end;
Aufzurufen als
AddNativeStyle(MeinMenu);
.
Ich hoffe es hilft Dir weiter.