AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Position des MenuItems Canvas bei zeichnen im Menu ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Position des MenuItems Canvas bei zeichnen im Menu ermitteln

Ein Thema von Popov · begonnen am 31. Okt 2007 · letzter Beitrag vom 31. Okt 2007
 
Popov
(Gast)

n/a Beiträge
 
#1

Position des MenuItems Canvas bei zeichnen im Menu ermitteln

  Alt 31. Okt 2007, 18:26
Ich erstelle gerade in meinem Programm ein Menü das über OnAdvancedDrawItem neu gestaltet wird. OnAdvancedDrawItem hat ziemlich wenig Parameter, so daß einiges nicht so schnell erkennbar wird wie man es lösen kann.

type TAdvancedMenuDrawItemEvent = procedure (Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState) of object; Mein Problem ist die Position des ACanvas innerhalb des Menüs. Wenn man das nicht berücksichtigt, dann wird alles in erste Zeile geschrieben. ARect ist auch keine Hilfe.

Nun hab ich das so gelöst, daß ich ich über MenuIndex zumindest das Item ermitteln habe und so durch multiplizieren die Position für das Rect berechnen konnte:

Delphi-Quellcode:
procedure TForm1.MenuItemAdvancedDrawItem(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
var
  ItemHeight, ItemTop: Integer;
  ...
begin
  with TMenuItem(Sender), ACanvas do
  begin
    ItemHeight := ARect.Bottom - ARect.Top;
    ItemTop := (MenuIndex * ItemHeight); // <<< Vorsicht
  ...
Das es nicht die beste Lösung war zeigt das "Vorsicht" in der Zeile. Das steht da seit dem ich die Zeile geschrieben habe. Denn sollange es alles aktive Items sind, bestehen keine Probleme. Baut man Separator ein oder ein unsichtbares Item, ist die Rechnung für den Müll. Dann stimmt MenuIdex nicht mehr, denn er zählt nur aktive Items.

Nun hab ich ein Separator eingebaut und jetzt stimmt die Rechnung nicht mehr. Alle Items nach dem Separator werden an falscher Stelle gezeichnet.

Die Frage ist also wie kann ich die Position für ACanvas ermitteln. Irgendwas muß ich übersehen haben.
  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 14:48 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 by Thomas Breitkreuz