Hallo liebe
DP!
Ich bin mal wieder auf ein Problem gestoßen, an dem, so hoffe ich jedenfalls, ich keine Schuld habe.
Folgendes mache ich, ich erstelle auf einer Form ein MainMenu, per Designer erstelle ich einen Menupunkt.
Im FormCreate rufe ich dann eine mehode auf die diesen Menupunkt füllt.
Das klappt auch alles sehr gut.
Nun das Problem, wenn ich vom jetzigen in ein anderes
Vcl.Theme wechsle wird das Menu immer oberhalb der Form dargestellt.
Das nervt aber ist noch nicht das eigentliche Problem.
Wenn oberhalb der Form kein Platz ist (Monitor begrenzt den Spielraum) schließt sich das Menu automatisch wieder.
Kann man das ändern bzw ist das ein Bug?
Hier der Code wie ich das Menu fülle und das entsprechende OnClick-Event:
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;
if TStyleManager.ActiveStyle.Name = ACaption then
Item.Checked := True;
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;
procedure kzTheme.NativeStyleClick(Sender: TObject);
var
StyleName: String;
i: Integer;
begin
StyleName := StringReplace(TMenuItem(Sender).Caption, '&', '',
[rfReplaceAll, rfIgnoreCase]);
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;
Im OnCreate des Hauptformulars steht halt nur
MyTheme.AddNativeStyle(mnuVcl);
. (mnuVcl ist der von mir per Designer erzeugte Menupunkt)
Danke fürs Lesen!