Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Owner draw eines Popupmenü bringt Probleme seit D6


Wilcox - Mi 20.11.02 14:53
Titel: Owner draw eines Popupmenü bringt Probleme seit D6
Hallo allesamt.
Ich habe ein kleines Problem mit einer Procedure, welche ein Popupmenü
andersfarbig gestalten soll (was sie ja auch tut) - nun das Problem, trat beim Wechsel zu D6 auf und ich weiss keine Lösung dafür.

Also lange Rede kurzer Sinn :

Die Procedure soll den obersten Menüpunkt ausmalen mit Grau und den Text darin weiss darstellen. Gut funktioniert auch soweit, nur leider ist der Checked-Haken bei den anderen darunterliegenden Menüpunkten nicht mehr sichtbar, sondern es wird nur ein kleiner hellgrauer Punkt dargestellt. Hat jemand eine Idee wie das zu fixen ist?

Also hier das Quellbeispiel:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TfrmDeveloperMain.DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: boolean);
var
  LeftPos:    integer;
  TopPos:     integer;
  TextLength: integer;
  Text:       string;
begin
  Text := (Sender as TMenuItem).Caption;
  ACanvas.Brush.Color := clGray;
  ACanvas.FillRect(ARect);
  ACanvas.Font.Color := clWhite;
  ACanvas.Font.Style := [fsBold];
  // Draw right in the middle of the menu
  TopPos     := ARect.Top + (ARect.Bottom - ARect.Top - ACanvas.TextHeight(Text)) div 2;
  TextLength := Length(Text);
  if TextLength > (ARect.Right - ARect.Left) then
    LeftPos := ARect.Left + 3
  else
    LeftPos :=
      ARect.Left + (ARect.Right - ARect.Left - ACanvas.TextWidth(Text)) div 2;
  ACanvas.TextOut(LeftPos, TopPos, Text);
end;

Ich danke für die Mühen und Hilfen,

Grüße sendet

Wilcox
(20.11. 17:19 Tino) Code-Tags hinzugefügt.


FriFra - Mi 20.11.02 15:14

Hallo,
ich kann zwar dein Problem nicht lösen, aber das Problem tritt nicht erst seit Delpi6 auf.
Ich habe Deinen Code gerade in Delphi5 und Delphi7 getestet, jedesmal mit dem gleichen Fehler.


Wilcox - Mi 20.11.02 15:17

hi FriFra,

das ist ulkig, ich hatte es früher in delphi 5 laufen und dort lief es ohne probleme inkl. der anzeige der checked-häkchen :(

*grübel*


Wilcox - Mi 20.11.02 16:15
Titel: Des Rätsels Lösung
Naja ich hab eine Lösung gefunden, ist zwar keine elegante Lösung aber reicht für meine Applikation aus.
Man muss in dem Menü einfach nur Images verwenden und somit wird die Breite für alle Menü/Submenüeinträge neu berechnet und das Menü auch automatisch verbeitert.

:)

Ich danke für die Mühen.

Grüße sendet

Wilcox