![]() |
PopupMenu u. Caption (-)
Hallo zusammen
Möchte in meinem PopupMenu einen Eintrag besonders darstellen. Menüstruktur z.B. Ändern Löschen Abbrechen _______________ Alles markieren _______________ -----Demo------ :wall: :wall: :wall: Wie kann ich es anstellen, dass ich denn Text ( Caption ) verändern kann und links und rechts vom Text eine durchgezogene Linie ist wie wenn ich ein (-) Eingebe. bin langsam am verzweifeln habe leider keinen Ansatz H I L F E ! ! ! ! ! ! schöne Grüsse Tau |
Re: PopupMenu u. Caption (-)
Da dürfte wohl nur selber zeichnen helfen. Ich habe mal was gemacht:
Delphi-Quellcode:
Du musst nur noch das entsprechenden MenüItem auf OwnerDraw = True stellen und den obigen Code in die entsprechenden Ereignissroutinen kopieren. Ich vermute mal, das soll so was wie eine Überschrift werden, deshalb dachte ich, der 3D Effekt wäre ganz passend.
procedure TForm1.mitStrich1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer); begin // etwas breiter machen, damit es nach was aussieht Width := Length((Sender as TMenuItem).Caption) + 100; end; procedure TForm1.mitStrich1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin // zwei versetzte Linien zeichen für den 3D Effekt ACanvas.Pen.Color := clBtnShadow; ACanvas.MoveTo(2, ARect.Bottom - ARect.Top div 2 - 3); // - 3 -> Die Linie sitzt etwas zu weit unten ACanvas.LineTo(ARect.Right - 2, ARect.Bottom - ARect.Top div 2 - 3); // - 3 -> Die Linie sitzt etwas zu weit unten ACanvas.Pen.Color := clWhite; ACanvas.MoveTo(2, ARect.Bottom - ARect.Top div 2 - 2); ACanvas.LineTo(ARect.Right - 2, ARect.Bottom - ARect.Top div 2 - 2); // Und den Text mittig drüber schreiben DrawText(ACanvas.Handle, PChar((Sender as TMenuItem).Caption), Length((Sender as TMenuItem).Caption), ARect, DT_CENTER); end; |
Re: PopupMenu u. Caption (-)
Hi Tau,
ich finde diese Sonderlocken zwar nicht gut, weil sie dem Geist des style guide zuwider laufen, aber extra code musst du nicht unbedingt schreiben. Das hyphen ist nunmal nicht durchgehend, also nimm statt dessen das Zeichen Alt-0151 und alles wird gut. Grüße vom marabu |
Re: PopupMenu u. Caption (-)
Da finde ich meins aber schöner. :mrgreen:
|
Re: PopupMenu u. Caption (-)
@Luckie: an dieser Stelle
Delphi-Quellcode:
schon mal darüber nachgedacht, wieso es zu weit unten sitzt? (Tipp: Punkt- und Strichrechnung)
ACanvas.MoveTo(2, ARect.Bottom - ARect.Top div 2 - 3); // - 3 -> Die Linie sitzt etwas zu weit unten
Die korrekte Mitte zwischen Top und Bottom wäre übrigens:
Delphi-Quellcode:
ACanvas.MoveTo(ARect.Left + 2, (ARect.Top + ARect.Bottom) div 2);
|
Re: PopupMenu u. Caption (-)
Zitat:
Ach, weiß noch jemand, wie man das Highlight wegbekommt? Wenn es wirklich eine Art Überschrift werden soll, wäre das wohl auch ganz nett. Man muss dazu wohl dieses andere OwnerDraw Ereignis nehmen, nur ich habe es nicht hinbekommen. Grund siehe oben. ;) |
Re: PopupMenu u. Caption (-)
So klappt es:
Delphi-Quellcode:
Wenn man enabled jetzt noch auf false setzt, kann man das Item weder anklicken, noch wird es 'gehighlighted'.
procedure TForm1.MitLinie1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer); begin // hier die Breite des Textes bestimmen, und etwas zugeben Width := ACanvas.TextWidth((Sender as TMenuItem).Caption)+20; end; procedure TForm1.MitLinie1AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState); begin If Not((odSelected) in State) Then Begin ACanvas.MoveTo(2,(ARect.Bottom-ARect.Top)Div 2); ACanvas.LineTo(ARect.Right-2,(ARect.Bottom-ARect.Top)Div 2); DrawText(ACanvas.Handle, PChar(' '+(Sender as TMenuItem).Caption+' '), Length((Sender as TMenuItem).Caption)+2, ARect, DT_CENTER); End; end; Gruß, teebee |
Re: PopupMenu u. Caption (-)
Hallo Leute
Danke für die zahlreichen antworten. Ist genau das was ich gesucht hatte. :witch: :witch: Besten Dank schöne Grüsse Tau |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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