Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Labels schön anordnen... oder ne andere möglichkeit?
Ebil - Di 24.06.08 23:09
Titel: Labels schön anordnen... oder ne andere möglichkeit?
Ich erstelle eine liste die ich mit labels darstellen will in dem vormat.
Blabla: Wert
Dabei sind einige einträge länger
Blablabla:
Das ganze sollte aber gleichmäßig aussehen, deswegen labels.
Das ganze ist etwas schwer anzuordnen, manche labels haben doofe abstände zum darüber liegenden.
Eine listbox macht da ein paar probleme, denn nicht jeder buchstabe ist gleich groß, und somit sieht das ganze ein wenig durcheinander aus, und das will ich vermeiden.
Gibt es denn eine andere komponente die dafür geeignet wäre?
Marc. - Di 24.06.08 23:15
Titel: Re: Labels schön anordnen... oder ne andere möglichkeit?
Ebil hat folgendes geschrieben: |
Eine listbox macht da ein paar probleme, denn nicht jeder buchstabe ist gleich groß, und somit sieht das ganze ein wenig durcheinander aus, und das will ich vermeiden.
Gibt es denn eine andere komponente die dafür geeignet wäre? |
Ich weiß zwar nicht genau, was Du vorhast, aber der Font
Courier bietet dir gleichmäßig große Letter. ;)
Grüße,
Marc.
Ebil - Di 24.06.08 23:18
Das es auf die schriftart ankommt wusste ich noch garnicht, danke für die info.
Leider passt die überhaupt nicht in mein Projekt :/
(Ich will am besten einfach Labels schön anordnen... das wollen die Labels aba nicht.)
Ebil
Lannes - Mi 25.06.08 00:13
Hallo,
Ebil hat folgendes geschrieben: |
Gibt es denn eine andere komponente die dafür geeignet wäre? |
mehrere, je nach Anforderung:
TValueList, TListView, TStringGrid ...
Das Screenshot im Anhang basiert auf ein TStringGrid mit entsprechenden Einstellungen im OI.
alzaimar - Mi 25.06.08 07:29
Eine komerzielle Komponente für das automatische Ausrichten/Anordnen von Controls bietet Developer Express (
http://www.devExpress.com) mit seiner TLayoutControl-Suite.
Selbst könntest du es so lösen, das Du zwei Panel (ohne 3D-Rand) vertikal nebeneinander anordnest. Auf das linke Panel kommen alle Label untereinander, auf das rechte Label alle Eingabefelder. Nun kannst Du zur Laufzeit (z.B. im FormCreate) eine einfache Positionierungsschleife implementieren. Damit ist sichergestellt, das wirklich alle Label und Eingabefelder pixelgenau ausgerichtet sind.
Mit einem Stringgrid (FixedColumns = 1) und dem rumspielen mit Ctrl3D könntest du eine Art eindimensionalen Objektinspektor hinbasteln, ich finde die Lösung mit den beiden Panel aber hübscher
Xion - Mi 25.06.08 09:48
oder ganz einfach (dynamisch):
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:
| var List: array of array of String; ListLbls: array of array of TLabel; [...]
var A: integer; MaxW: integer; Spacer: integer; begin
Spacer:=5;
SetLength(List, 2,10); SetLength(ListLbls, 2,10);
List[0,0]:='bla'; List[1,0]:='500'; List[0,1]:='blub'; List[1,1]:='800'; List[0,2]:='blabla'; List[1,2]:='1000'; List[0,3]:='bla'; List[1,3]:='1500';
MaxW:=0; MaxWDummy:=0; for A:=0 to High(List) do begin MaxW:=MaxWDummy; for B:= 0 to High(List[A]) do begin ListLbl[A,B]:=TLabel.Create(Form1); ListLbl[A,B].Parent:=Form1; ListLbl[A,B].Font.Size:=13; ListLbl[A,B].AutoSize:=True ListLbl[A,B].Caption:=List[A,B];
ListLbl[A,B].Left:=Spacer+A*MaxW; ListLbl[A,B].Top:=Spacer+B*(ListLbl[A,B].Height+Spacer);
if (MaxWDummy<ListLbl[A,B].Width) then MaxWDummy:=ListLbl[A,B].Width; end; end; |
ungetestet
den Code könnte man ganz leicht zu einer eigenen Komponente zusammenfassen
Ebil - Mi 25.06.08 17:42
Hi leute,
Danke für eure mühe, das wird mir dann für sowas aber direkt wieder zu kompliziert Xion ^^.
Ich werds mal mit nem stringrid probieren...
//Edit:Hab das ganze mal mit nem stringgrid gemacht, und sieht ziemlich gut aus, aber ein problem hab ich: Wie kann ich es machen, das man nichts mehr darin auswählen kann, und auch nicht beim start links oben schon etwas markiert ist? Mit Active.Control hab ichs versucht :/.
Ausserdem benutz ich die AlphaControls komponenten(dort ist kein stringgrid bei! leider) und kann die hintergrund farbe nicht ändern, es ist immer schwarz, auch wenn ich es zur laufzeit mache.
Hoffe jemand kennt sich mit dem ding aus ^^
Ebil
//Edit2:
Ok wenn ich die farbänderung NICHT ins OnCreate der Form schreibe, sondern zb in nem button... funktioniert es.
Sehr merkwürdig :/.
Ebil~
//Edit3:
Gut mittlerweile hab ich schonmal keine selektion beim start, und setz enabled auf false, sowas man nichtsmehr auswählen kann, alles zwar bisschen umständlich aber das ist es wohl wert, So hab ich die selektion deactiviert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Const NoSelection: TGridRect = (Left:-1; Top:-1; Right:-1; Bottom:-1 ); begin StringGrid1.Selection := NOSelection; end; |
Xion - Do 26.06.08 13:22
im Objekt Inspektor hat das StringGrid einen Unterpunkt "Optionen" wenn ich mich nicht irre, da kannst du solche Sachen wie Markierung usw. einstellen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!