AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TMainMenu/TMenuItem problem mit Vcl.Themes

Ein Thema von KodeZwerg · begonnen am 15. Mai 2021 · letzter Beitrag vom 15. Mai 2021
 
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

TMainMenu/TMenuItem problem mit Vcl.Themes

  Alt 15. Mai 2021, 12:52
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz