| Autor |
Beitrag |
Zaubär
      
Beiträge: 99
|
Verfasst: Mo 31.03.03 20:15
Hallo,
in meinem Proramm benutze ich eine Listview und 3 Spalten. 2 davon möchte ich, dass sie genau so breit sind wie der längste Text in der entsprechenden Zeile. Die 3. soll danach einfach den Rest des Platzes nutzen und wenn ein Text länger ist, abgeschnitten werden.
Leider hab ich das nicht geschafft, dass es klappt.
Ich hab's ungefähr so probiert:
Quelltext 1: 2: 3:
| Listview1.Column[0].Width := -1; Listview1.Column[1].Width := -1; Listview1.Column[2].Width := Listview1.ClientRect.Left - Listview1.Column[0].Width - Listview1.Column[1].Width |
Leider kann ich die Breite nicht mehr ermitteln wenn ich eine Spalte auf -1 gesetzt habe. Kann mir jemand diesbezüglich helfen ?
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Mo 31.03.03 20:29
soviel ich weiss, ist -1 autosize. Allerdings erst wenn Text drinne steht. Also erst die Texte rein und dann Autosize := -1. Dann das ganze in einem BeginUpdates/Endupdate Block, damits den Anwender nicht verwirrt.
grez
msch
|
|
Zaubär 
      
Beiträge: 99
|
Verfasst: Mo 31.03.03 20:34
| MSCH hat folgendes geschrieben: | | soviel ich weiss, ist -1 autosize. Allerdings erst wenn Text drinne steht. Also erst die Texte rein und dann Autosize := -1. Dann das ganze in einem BeginUpdates/Endupdate Block, damits den Anwender nicht verwirrt. |
Das mit dem BeginUpdates/Endupdate Block hab ich jetzt nicht geschnallt. Hab noch nie damit gearbeitet ?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 01.04.03 16:50
Hallo Zaubär!
Ich verstehe überhaupt nicht so recht warum du die Breite der Spalte auf -1 setzt. Ich würde die Spalten manuell anpassen, indem du zunächst deine ganzen Datensätze druchgehst und den längsten mit Canvas.TextWidth ermittels. Danach legst du die Breiten der beiden Spalten fest. Warscheinlich musst du zu beiden Breiten noch ein Faktor c addieren, aber das merkst du dann selber. Zum Schluss ziehst du die beiden Breiten von der absoluten Breite ab.
Ich weisse schwer zu verstehen, aber hier mal veranschaulicht  : Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| const LängsteBreite = 120; c = 10; //ein bisschen Platz lassen d = 20; //Platz für den Scrollbalken begin Columns[0].Width := LängsteBreite + c; Columns[1].Width := LängsteBreite + c; Columns[2].Width := Width - Columns[0].Width - Columns[1].Width - d; | Ich hoffe das war verständlich
Gruß wulfskin!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Zaubär 
      
Beiträge: 99
|
Verfasst: Di 01.04.03 16:52
Verliert man nicht sehr viel Zeit wenn man alles durchgehen muss um die Breite zu ermitteln ?
PS: Das mit dem Scrollbalken brauch ich nicht, dafür habe ich dieses "ClientRect.Left" gefunden 
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 01.04.03 16:55
| Zaubär hat folgendes geschrieben: | Verliert man nicht sehr viel Zeit wenn man alles durchgehen muss um die Breite zu ermitteln ?
PS: Das mit dem Scrollbalken brauch ich nicht, dafür habe ich dieses "ClientRect.Left" gefunden  |
Kurz gesagt: Nein. Das geht in Bruchstücken einen Sekunde...
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Zaubär 
      
Beiträge: 99
|
Verfasst: Di 01.04.03 17:49
Ok, stimmt eigentlich!
Auf meinem neuen PC sowieso 
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Di 01.04.03 19:53
| wulfskin hat folgendes geschrieben: | Hallo Zaubär!
Ich verstehe überhaupt nicht so recht warum du die Breite der Spalte auf -1 setzt. Ich würde die Spalten manuell anpassen, indem du zunächst deine ganzen Datensätze druchgehst und den längsten mit Canvas.TextWidth ermittels. Danach legst du die Breiten der beiden Spalten fest. Warscheinlich musst du zu beiden Breiten noch ein Faktor c addieren, aber das merkst du dann selber. Zum Schluss ziehst du die beiden Breiten von der absoluten Breite ab.
Ich weisse schwer zu verstehen, aber hier mal veranschaulicht : Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| const LängsteBreite = 120; c = 10; //ein bisschen Platz lassen d = 20; //Platz für den Scrollbalken begin Columns[0].Width := LängsteBreite + c; Columns[1].Width := LängsteBreite + c; Columns[2].Width := Width - Columns[0].Width - Columns[1].Width - d; | Ich hoffe das war verständlich
Gruß wulfskin! |
so ein quatsch, sorry, aber TListViews können sehr wohl die Spaltenbreite selbst (-1) ausrechnen, da muß man nicht diese Geschütze auffahren.
Was soll den "ein bisschen Platz lassen"
Das ist kein richtiges Programmieren, das ist "mit den Bauch-durch die Brust ins Linke Auge" programmierstil.
grez
msch
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Di 01.04.03 21:05
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Zaubär 
      
Beiträge: 99
|
Verfasst: Mi 02.04.03 17:46
Ich hab's gestern Abend schnell getestet. Es funktioniert nicht
Die Funktion liefert zwar die Breite des Textes aber unabhängig von Schriftart und Schriftgrösse....
|
|