![]() |
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!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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