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/)
-   -   Möglichkeiten von Menüs, bzw. TMenuItem (https://www.delphipraxis.net/173062-moeglichkeiten-von-menues-bzw-tmenuitem.html)

Popov 5. Feb 2013 13:27

Möglichkeiten von Menüs, bzw. TMenuItem
 
Vielleicht sehe ich mal wieder nur nicht den Wald vor lauter Bäume nicht mehr oder vielleicht ist alles offensichtlich, vielleicht steht es mal wieder in der OH und ich sehe es nur wieder mal nicht.

Es geht um Menüs und die Einsatzmöglichkeiten, bzw. was mich interessiert sind alternative oder erweiterte Einsatzmöglichkeiten. Ok, OnClick bietet eigentlich alles was man sich wünscht, aber nicht wenn man das Menü eher flexibel nutzt. Mal ein Beispiel: ich möchte in das Menü für Auswahl von 16 Farben nutzen. In einer ComboBox würde ich es einfach machen in dem ich die Farbe in einem Objekt vermerke und das an das Item klebe und zuletzt alle OnClick Ereignisse auf eine einzige Prozedur zeigen würden.

Das vermisse ich bei TMenuItem oder ich übersehe da etwas. Für ein Projekt muss alles flexibel sein und was das Menü macht entscheidet sich immer erst bei Bedarf.

Ich weiß, dass andere Programme Menüs auch flexibel einsetzten, nur weiß ich nicht ob sie das Standardmenü nutzen oder eine eigene Komponente. Was ich also vermisse ist etwas wo ich meine Objekt dran kleben kann.

DeddyH 5. Feb 2013 13:34

AW: Möglichkeiten von Menüs, bzw. TMenuItem
 
Wenn es gar nicht anders geht, kannst Du (in einem 32Bit-Programm) eigentlich immer die Tag-Eigenschaft dafür missbrauchen.

Bummi 5. Feb 2013 13:42

AW: Möglichkeiten von Menüs, bzw. TMenuItem
 
Ownerdraw anschalten und gut ist ...

Delphi-Quellcode:
const
 ColorArray:Array[0..7] of TColor=(clRed,clLime,clBlue,clWhite,clMaroon,clGreen,clLime,clSilver);

procedure TForm1.DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
begin
   Acanvas.Brush.Color := TMenuItem(sender).Tag;
   Acanvas.FillRect(ARect);
end;

procedure TForm1.FormCreate(Sender: TObject);
Var
 i:Integer;
 mi:TMenuItem;
begin
   for I := 0 to 7 do
      begin
         mi := TMenuItem.Create(PopupMenu1);
         mi.Tag := ColorArray[i];
         mi.OnDrawItem := DrawItem;
         mi.OnClick := ItemClick;
         popupmenu1.Items.Add(mi);
      end;
end;

procedure TForm1.ItemClick(Sender: TObject);
begin
   Color := TMenuItem(Sender).Tag;
end;

Popov 5. Feb 2013 14:08

AW: Möglichkeiten von Menüs, bzw. TMenuItem
 
Liste der Anhänge anzeigen (Anzahl: 1)
@DeddyH

Hab zwar auch schon dran gedacht, also eine Art Doppelpflege, hier Menü, da Liste, logisch verbunden über Tag, aber für das Projekt und die Langzeitpflege wird das zu unübersichtlich, da das Projekt etwas komplexer wird.

Also wenn ich nichts übersehen habe, wird es mit einer neuen Komponente enden. Wäre auch eine Möglichkeit, auch wenn ich hoffe einfach etwas übersehen zu haben.

@Bummi

Danke, aber die Farben waren hier nur ein Beispiel. Es geht um mehr Informationen. Wobei bei tricksen bin ich gar nicht so unbedarft (hab mich dank dir gerade an ein älteres Projekt erinnert). Im Anhang ein Bild, zufällig auch Menü, bzw. PopUpMenu und Farben, wo ich auch das Menü flexibel gestaltet habe, bzw. die Schema-Teile. Der Trick hier war, dass im Menü selbst ein langer Kommagetrennter String mit vielen Informationen eingefügt wurde, aber in OnDrawItem der Zerlegt wurde und ein neuer Text gemalt wurde. Damals habe ich also das Caption für die Informationen missbraucht.

Somit hat sich die Frage mehr oder weniger erledigt. Denn wenn ich damals schon tricksen musste, habe ich mir damals auch Gedanken vorher gemacht. Somit gibt es da wohl nichts.

DeddyH 5. Feb 2013 14:26

AW: Möglichkeiten von Menüs, bzw. TMenuItem
 
Wozu Liste? Leg das Objekt in der Tag-Eigenschaft ab und gut. Du darfst nur nicht vergessen, es dann wieder freizugeben. Wirklich sauber ist das aber natürlich nicht, das wäre mit einer eigenen Komponente schöner hinzukriegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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