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/)
-   -   Delphi PopupMenu u. Caption (-) (https://www.delphipraxis.net/53869-popupmenu-u-caption.html)

Tau 24. Sep 2005 01:20


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

Luckie 24. Sep 2005 01:53

Re: PopupMenu u. Caption (-)
 
Da dürfte wohl nur selber zeichnen helfen. Ich habe mal was gemacht:

Delphi-Quellcode:
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;
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.

marabu 24. Sep 2005 06:33

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

Luckie 24. Sep 2005 12:15

Re: PopupMenu u. Caption (-)
 
Da finde ich meins aber schöner. :mrgreen:

Flocke 24. Sep 2005 12:25

Re: PopupMenu u. Caption (-)
 
@Luckie: an dieser Stelle
Delphi-Quellcode:
ACanvas.MoveTo(2, ARect.Bottom - ARect.Top div 2 - 3); // - 3 -> Die Linie sitzt etwas zu weit unten
schon mal darüber nachgedacht, wieso es zu weit unten sitzt? (Tipp: Punkt- und Strichrechnung)

Die korrekte Mitte zwischen Top und Bottom wäre übrigens:
Delphi-Quellcode:
ACanvas.MoveTo(ARect.Left + 2, (ARect.Top + ARect.Bottom) div 2);

Luckie 24. Sep 2005 12:27

Re: PopupMenu u. Caption (-)
 
Zitat:

Zitat von Flocke
@Luckie: an dieser Stelle
Delphi-Quellcode:
ACanvas.MoveTo(2, ARect.Bottom - ARect.Top div 2 - 3); // - 3 -> Die Linie sitzt etwas zu weit unten
schon mal darüber nachgedacht, wieso es zu weit unten sitzt? (Tipp: Punkt- und Strichrechnung)

Um die Uhrzeit pflege ich nicht mehr zu denken. :mrgreen: Danke für den Hinweis. :thumb:

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. ;)

teebee 24. Sep 2005 12:51

Re: PopupMenu u. Caption (-)
 
So klappt es:
Delphi-Quellcode:
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;
Wenn man enabled jetzt noch auf false setzt, kann man das Item weder anklicken, noch wird es 'gehighlighted'.

Gruß, teebee

Tau 26. Sep 2005 05:08

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