Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Deaktiviertes TMenuItem wird falsch gezeichnet (https://www.delphipraxis.net/183941-deaktiviertes-tmenuitem-wird-falsch-gezeichnet.html)

Aviator 15. Feb 2015 18:44


Deaktiviertes TMenuItem wird falsch gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Leute,
ich habe ein kleines Problem mit einem von mir gezeichneten TMenuItem in einem TPopupMenu. Ich würde gerne erreichen, dass das TMenuItem ähnlich wie z.B. in Excel 2013 gemalt wird.
Praktisch ein Eintrag, der nur eine Rubrik vom Elementen abgrenzen soll. Einfach nur zum schön aussehen.

Das Zeichnen des Items klappt eigentlich auch fast so wie ich es haben möchte.
Allerdings gibt es auch noch 2 Punkte, die noch nicht so funktionieren wie sie sollen:
  1. Der Hintergrund wird nicht gezeichnet. Warum weiß ich nicht. Vielleicht kann mir da noch jemand weiterhelfen.
  2. Das Item, dass als Rubrik gelten soll, wird, beim drüberfahren mit der Maus, grau gemalt. Das Item ist im OI auf
    Delphi-Quellcode:
    Enabled = false
    gesetzt (damit nicht anklickbar)
Bei letzterem Punkt scheint Windows reinzupfuschen, denn in meiner OnDraw Routine wird immer nur der Zustand gezeichnet, wie es im aktivierten Zustand aussehen sollte.

Hier mal der EventHandler des OnDraw Events:
Delphi-Quellcode:
procedure TfrmMain.OnDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
const
  MENUTEXT = 'Benutzeroptionen:';
begin
  if (Sender is TMenuItem) then begin
    if ((Sender as TMenuItem) = pmiN1) then begin
      SetBkMode(ACanvas.Handle, TRANSPARENT);
      ACanvas.Brush.Color := $00EEEEEE;
      ACanvas.FillRect(ARect);
      ilSmall.Draw(ACanvas, 5, ARect.Height DIV 2 - 8, 18);
      ACanvas.Pen.Color := $00777777;
      ACanvas.Brush.Style := bsClear;
      ACanvas.Font.Style := [fsBold];
      ACanvas.TextOut(31, ARect.Height DIV 2 - ACanvas.TextHeight(MENUTEXT) DIV 2, MENUTEXT);
    end;
  end;
end;
Im Anhang befinden sich noch zwei kleine Screenshots des PopupMenus um das Problem zu verdeutlichen. Es handelt sich um das erste Item im Menü. Das erste Bild zeigt das Menü im nicht ausgewählten Zustand. Das zweite im ausgewählten Zustand.

Edit:
Das dritte Bild zeigt, wie es in Excel aussieht. So hätte ich das gerne.

himitsu 16. Feb 2015 07:38

AW: Deaktiviertes TMenuItem wird falsch gezeichnet
 
Zitat:

Zitat von Aviator (Beitrag 1289955)
  1. Der Hintergrund wird nicht gezeichnet. Warum weiß ich nicht.

Vielleicht durch das TRANSPARENT?

Aviator 16. Feb 2015 13:50

AW: Deaktiviertes TMenuItem wird falsch gezeichnet
 
Zitat:

Zitat von himitsu (Beitrag 1290001)
Vielleicht durch das TRANSPARENT?

Nein, damit hatte es leider auch nichts zu tun. Andere Ideen? Vielleicht auch für mein anderes Problem?

hemmingway 22. Jan 2016 10:40

AW: Deaktiviertes TMenuItem wird falsch gezeichnet
 
TStyleManager.SystemHooks := [];

könnte helfen. Ist das so?

Aviator 22. Jan 2016 18:58

AW: Deaktiviertes TMenuItem wird falsch gezeichnet
 
Zitat:

Zitat von hemmingway (Beitrag 1327812)
TStyleManager.SystemHooks := [];

könnte helfen. Ist das so?

Hi, ist vielleicht nicht direkt ersichtlich, aber hier geht es nur um VCL. TStyleManager wird ja so viel wie ich weiß nur in FMX verwendet, lasse mich aber gern eines besseren belehren.

Redeemer 25. Jan 2016 16:31

AW: Deaktiviertes TMenuItem wird falsch gezeichnet
 
Delphi-Quellcode:
ACanvas.Font.Color := $00777777;
?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz