Das Problem ist: TStyleManager ist hier unbekannt, auch wenn ich unter Uses beide Units aufführe.
In deinem Sourcecode verwendest du allerdings auch
TStylesManager
und nicht
TStyleManager
.
Beispielcodes zur Verwendung von TStyleManager habe ich keinen gefunden.
OK, hier ein bisschen Code für den Anfang. Erstellen eines Sub-Menüs mit allen verfügbaren Styles plus Event zum Wechseln des Style:
Delphi-Quellcode:
...
mnuStyle: TMenuItem;
private
FActiveStyle: string;
procedure SetActiveStyle(const Value: string);
procedure mnuStyleItemClick(Sender: TObject);
procedure LoadStyleMenu;
procedure AddStyleMenuItem(S: string);
public
property ActiveStyle: string read FActiveStyle write SetActiveStyle;
...
procedure TMainForm.LoadStyleMenu;
var
arr: TArray<string>;
S: string;
systemStyleName: string;
begin
mnuStyle.Clear;
arr := TStyleManager.StyleNames;
TArray.Sort<string>(arr); // alphabetisch sortieren
systemStyleName := TStyleManager.SystemStyle.Name;
AddStyleMenuItem(systemStyleName); // Windows immer zuerst
for S in arr do begin
if S <> systemStyleName then begin
AddStyleMenuItem(S);
end;
end;
end;
procedure TMainForm.AddStyleMenuItem(const AStyleName: string);
var
itm: TMenuItem;
begin
itm := TMenuItem.Create(Self);
itm.Caption := AStyleName;
itm.RadioItem := true;
itm.AutoCheck := true;
itm.Checked := (AStyleName = TStyleManager.ActiveStyle.Name);
itm.OnClick := mnuStyleItemClick;
mnuStyle.Add(itm);
end;
procedure TMainForm.mnuStyleItemClick(Sender: TObject);
begin
ActiveStyle := (Sender as TMenuItem).Caption;
end;
procedure TMainForm.SetActiveStyle(const Value: string);
begin
if FActiveStyle <> Value then begin
FActiveStyle := Value;
if FActiveStyle = '' then begin
TStyleManager.SetStyle(nil);
end
else begin
TStyleManager.TrySetStyle(FActiveStyle);
end;
end;
end;