Autor |
Beitrag |
Ebil
      
Beiträge: 131
|
Verfasst: Di 24.06.08 23:09
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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 24.06.08 23:15
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 
      
Beiträge: 131
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
Einloggen, um Attachments anzusehen!
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 25.06.08 07:29
Eine komerzielle Komponente für das automatische Ausrichten/Anordnen von Controls bietet Developer Express ( 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
_________________ Na denn, dann. Bis dann, denn.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 25.06.08 09:48
oder ganz einfach (dynamisch):
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
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Ebil 
      
Beiträge: 131
|
Verfasst: 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
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|