![]() |
ListView Spaltenbreite an Text automatisch anpassen
Morgen Leute.
wie bekomme ich es hin, das ich die Spaltenbreite automatisch an die Textbreite des Inhaltes anpassen kann? Angeblich mit property AutoSize: Boolean; aber das will nicht so ganz wie ich es möchte. Wir kann ich den Doppelklick auf die Spaltentrenner programmatisch aufrufen? Weil genau das wäre wohl die Idealste Lösung. Erst alles füllen und dann den Klick auf die Spaltentrenner simulieren. Gruß Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
Hallo,
das autosize boolean, hat damit nicht's zu tun, bei autosize wird nur angegeben, wenn die breite deines Listvies verändert wird, wird der Breite des Spalte dessen autosize auf true steht, automatisch die verbeitet, damit du nicht eine (leere) Spalte zu viel hast. Wie man die einzelnen Spaltenbreiten an den Inhalt anpasst, bzw. so anpasst damit man keine horizontale Scrollbar erhält, sobal die vertikale Scrollbar sichtbar wird, rätsel ich ebenfalls schon ne ganze Weile rum. |
Re: ListView Spaltenbreite an Text automatisch anpassen
Ich hab mir überlegt das man das Zeichen selber übernimmt und damit per canvas.textwidth die Breite des Textes heraus bekommt und danach die Spaltenbreite auf die größte gefundene Breite setzt.
Aber das ist sehr umständlich. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
Zitat:
|
Re: ListView Spaltenbreite an Text automatisch anpassen
Stimmt.
Ich habs auch nun. Font des canvas der ListView = Font der ListView. Dann ne menge Abfragerrei, die Breiten in einem Array merken und dann mit einer for Schleife über den Array laufen und die Breiten setzen. Ich musste aber ca 20 Pixel zu dem berechneten Wert hinzuaddieren, sonst hat es nicht ganz gepasst. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
Zitat:
|
Re: ListView Spaltenbreite an Text automatisch anpassen
Sven Janssen, könntest du mal deinen source posten, vielleicht lässt sich der ja noch optimieren.
|
Re: ListView Spaltenbreite an Text automatisch anpassen
Delphi-Quellcode:
Wirklich viel zum optimieren sehe ich dort nicht.
var spalte,col:integer;
colw : array [0..10] of integer; begin lv2.canvas.font:=lv2.font; for i:=low(colw) to high(colw) do colw[i]:=100; lv2.Columns.clear; q.first; while not q.eof do begin . . // Hier wird durch eine Tabelle gelaufen für n Elemente . nitem.subitems.add(q.fieldbyname(telArray[was]).asstring); telefoncol:=0; col:=lv2.canvas.textwidth(q.fieldbyname(telArray[was]).asstring); inc(spalte); if col > colw[spalte] then colw[spalte]:=col; nitem.subitems.add(q.fieldbyname(faxArray[was]).asstring); faxcol:=1; col:=lv2.canvas.textwidth(q.fieldbyname(faxArray[was]).asstring); inc(spalte); if col > colw[spalte] then colw[spalte]:=col; nitem.subitems.add(q.fieldbyname(emailArray[was]).asstring); emailcol:=2; col:=lv2.canvas.textwidth(q.fieldbyname(emailArray[was]).asstring); inc(spalte); if col > colw[spalte] then colw[spalte]:=col; q.next; end; . . // usw usw. _spalte_ deshalb da die Einträge variable sind. . for i:=0 to lv2.Columns.count -1 do lv2.Columns[i].width:=colw[i]+20; end; Oben ein Löschen, pro Eintrag 3 Zeilen für die Abfrage und unten eine Schleife für das setzen der Breite. Sven - nun Feierabend macht ... bis morgen |
Re: ListView Spaltenbreite an Text automatisch anpassen
Zitat:
man braucht eigentlich keinen extra code, probiers doch einfach mal mit
Delphi-Quellcode:
Columntextwidth : die spalte ist so groß wie der text und bei der andern wird die spaltegrößn anhand des Headers ermittelt.
listview1.column[x].width := ColumnTextWidth oder ColumnHeaderWidth.
Mfg Frank |
Re: ListView Spaltenbreite an Text automatisch anpassen
setze doch einfach die column-width auf -1, das ist einfach!!
|
Re: ListView Spaltenbreite an Text automatisch anpassen
:shock: das wäre nun das letzte worauf ich gekommen wäre, aber ich glaub ich schau mir mal den Quelltext der TListView an, da müsst ja drinn stehen, was genau beim Doppelklick zwischen 2 Column's passiert.
|
Re: ListView Spaltenbreite an Text automatisch anpassen
Zitat:
Aber vielen Dank. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
tja schön und gut, aber mir gefällt meine Lösung doch besser.
Denn wenn nichts in der Spalte vorhanden ist, oder der breiteste Eintrag kleiner wie die Überschrift ist, dann schaut es hässlich aus. Und abfragen danach ist nicht, denn width steht nun auf -1 und man bekoommt nicht die momentane Breite zurück. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
dann musst du davor abfragen :wink:
|
Re: ListView Spaltenbreite an Text automatisch anpassen
fragt sich nur auf was?
weil ich so gar nicht weiß wie groß die Spalte danach nun wird. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
Delphi-Quellcode:
So damit geht es. Also auf -2 und nicht -1 setzen.
for i:=0 to lv2.Columns.count -1 do lv2.Columns[i].width:=ColumnHeaderWidth;
Keldorn hatte es auch schon erwähnt. Sven |
Re: ListView Spaltenbreite an Text automatisch anpassen
Wo setzt du da einen Wert auf -2 :gruebel:
PS: Wenn du etwas posten möchtest, und von dir der letzte Post im Thread ist, so editiere bitte deinen letzten Beitrag und füge es so hinzu, damit bleibt das ganze Übersichtlicher. |
Re: ListView Spaltenbreite an Text automatisch anpassen
Zitat:
Delphi-Quellcode:
Sven
showmessage(intotstr(ColumnHeaderWidth));
// Ausgabe = -2 ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz