Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView Spaltenbreite an Text automatisch anpassen (https://www.delphipraxis.net/24517-listview-spaltenbreite-text-automatisch-anpassen.html)

Sven Janssen 22. Jun 2004 14:13


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

MrKnogge 22. Jun 2004 14:41

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.

Sven Janssen 22. Jun 2004 15:12

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

Sharky 22. Jun 2004 15:14

Re: ListView Spaltenbreite an Text automatisch anpassen
 
Zitat:

Zitat von Sven Janssen
Ich hab mir überlegt das man das Zeichen selber übernimmt und damit per canvas.textwidth ....

Du brauchst doch nicht selber zu Zeichnen um über den von dir beschriebenen Weg die Textbreite zu ermitteln und die Spaltenbreite entsprechend zu setzen.

Sven Janssen 22. Jun 2004 15:38

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

Sharky 22. Jun 2004 15:41

Re: ListView Spaltenbreite an Text automatisch anpassen
 
Zitat:

Zitat von Sven Janssen
...Dann ne menge Abfragerrei, die Breiten in einem Array merken und dann mit einer for Schleife über den Array laufen und die Breiten setzen....

Ist es nicht möglich/einfacher beim Eintragen eines Textes in die "Zelle" die notwendige Breite zu berechnen, diese mit der aktuellen Breite zu vergelichen und gegebenenfalls diese anzupassen?

MrKnogge 22. Jun 2004 16:18

Re: ListView Spaltenbreite an Text automatisch anpassen
 
Sven Janssen, könntest du mal deinen source posten, vielleicht lässt sich der ja noch optimieren.

Sven Janssen 22. Jun 2004 16:37

Re: ListView Spaltenbreite an Text automatisch anpassen
 
Delphi-Quellcode:
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;
Wirklich viel zum optimieren sehe ich dort nicht.
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

Keldorn 22. Jun 2004 17:55

Re: ListView Spaltenbreite an Text automatisch anpassen
 
Zitat:

Zitat von Sven Janssen
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.

Hallo

man braucht eigentlich keinen extra code, probiers doch einfach mal mit
Delphi-Quellcode:
listview1.column[x].width := ColumnTextWidth    oder ColumnHeaderWidth.
Columntextwidth : die spalte ist so groß wie der text und bei der andern wird die spaltegrößn anhand des Headers ermittelt.

Mfg Frank

silentAMD 22. Jun 2004 20:09

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 06:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz