Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Statistikübersicht in PopupMenu
Kay E. - Do 11.11.10 22:58
Titel: Statistikübersicht in PopupMenu
Hallo!
Da ihr mir bisher immer so toll helfen konntet, hoffe ich, dass ihr mir auch diesmal wieder helfen könnt.
Und zwar möchte ich in einem PopupMenu eine kleine Statistikübersicht ausgeben. Dabei sollen Links die (verschieden lange) Bezeichner (zum Beispiel "Erfolgsquote:") und rechts die Werte (in dem Fall zum Beispiel 47,05%) stehen. Da die Bezeichner nicht alle gleich lang sind, tu ich mir schwer, die Übersicht wirklich Übersichtlich zu machen. Schön wäre, wenn die Bezeichner links ausgerichtet werden und die Werte rechts ausgerichtet. Im Prinzip so aufgereiht wie die Shortcuts, die man angeben kann.
Habt ihr Vorschläge, wie ich das angehen kann?
Dankeschön schon im Vorraus!
Grüße Kay E.
jaenicke - Do 11.11.10 23:17
Wie wäre es mit Tabs?
Delphi-Quelltext
1:
| mniTest2.Caption := 'Test'#9'0,30 €'; |
Oder wie im Anhang direkt in Delphi eingeben. (Unten siehst du das Ergebnis.)
Kay E. - Do 11.11.10 23:23
Wow, danke für die schnelle Hilfe! Den Befehl "#9" kannte ich noch nicht. Ich hatte schon an Tabs gedacht, wusste aber nciht, wie ich das realisieren sollte.
Vielen Dank!
jaenicke - Do 11.11.10 23:27
Das Tab-Zeichen hat den Ascii-Code 9, dementsprechend kannst du dieses so direkt einfügen. Genauso geht es mit anderen Zeichen auch. ;-)
bummi - Do 11.11.10 23:27
ansonsten OwnerDraw=True und bei den Menuitems versorgen von
OnDrawItem oder OnAdvancedDrawItem
jaenicke - Fr 12.11.10 07:03
Das hätte den Vorteil, dass das ganze besser anpassbar ist, denn die Tabs sind ja kaum beeinflussbar (jedenfalls ohne weiteres). Außerdem kann man dann auch gleich andere grafische Spielereien einbauen. :mrgreen:
Am einfachsten ist es aber erst einmal mit Tabs, für den optischen Feinschliff ist immer noch (vielleicht) Zeit.
Kay E. - Fr 12.11.10 11:35
Danke für eure Hilfe. Ich hab das jetzt erstmal mit den Taps gemacht, aber ein bisschen "grafische Würze" wär schon nicht schlecht. Nur hab ich (bis jetzt) noch nie mit OnOwnerDraw und AdvancedOwnerDraw gearbeitet. Allerdings hab ich durchaus Interesse dran, meinen Horizont zu erweitern. Ihr habt mir nicht zufällig grad nen Codeschnippsel rumliegen, damit ich mal sehen kann, was ich damit alles anstellen kann und v.a. wie? Wenn nicht, ist auch nicht schlimm, dann versenk ich mich mal die Weiten des Internets und versuch mir da was anzueignen :)
Grüße Kay
bummi - Fr 12.11.10 13:04
nur Schmarn, aber
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ActnList;
type TForm2 = class(TForm) ActionList1: TActionList; Action1: TAction; PopupMenu1: TPopupMenu; I1: TMenuItem; I2: TMenuItem; I3: TMenuItem; procedure I3MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure I3AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState); private public end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.I3AdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState); var C:Tcolor; s:String; begin if odSelected in State then c := clBlue else c := clYellow; ACanvas.Brush.Color := c; Acanvas.FillRect(ARect); ACanvas.Brush.Color := clLime; ACanvas.Pen.Color := clRed; ACanvas.Ellipse(Arect.Left + 2,Arect.Top + 2, Arect.Left + 20 ,Arect.Top + 20); s := TMenuItem(Sender).Caption; Acanvas.Brush.Style := bsClear; ACanvas.TextRect(Arect,s,[tfCenter,tfWordBreak]); end;
procedure TForm2.I3MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Width := 300; if sender = I1 then Height := 50 else if sender = I2 then Height := 100 else if sender = I3 then Height := 20; end;
end. |
Kay E. - Mo 15.11.10 16:43
Als ich den Code am WE schnell mal probiert hab, hats nicht funktioniert, ich konnte nicht kompilieren (warum auch immer - keine Fehlermeldung). Ich werds heute oder morgen nochmal probieren. Vielen Dank für den Code und die Mühen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!