Listview Spalteninhalt wird abgeschnitten

Rund um die LCL und andere Komponenten
Antworten
Carina
Beiträge: 13
Registriert: Di 18. Jun 2013, 18:50

Listview Spalteninhalt wird abgeschnitten

Beitrag von Carina »

Hallo ihr ;)

ich habe folgenden Code mit dem ich den Inhalt einer Memo in eine Spalte einer ListView (ListView mit ca. 8 Spalten und vsReport) eintragen lasse. In der ListView wird der Inhalt allerdings nach ca.80 Zeichen einfach abgeschnitten. kann eine Spalte nur begrenzt Zeichen darstellen oder passt was mit meinem Code nicht?

Code: Alles auswählen

for i := 0 to Memo_Eingabe_Beschreibung.Lines.Count-1 do
   begin
     LI.SubItems.Add (Memo_Eingabe_Beschreibung.Lines.Strings[i]);
     LI.SubItems.Add(extractfilename(Memo_Eingabe_Beschreibung.Lines.Strings[i]));
    end; 



MfG Carina

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: Listview Spalteninhalt wird abgeschnitten

Beitrag von DonMigos »

Das Beispiel hier habe ich mal ausprobiert http://docs.embarcadero.com/products/ra ... Items.html, etwas geändert mit einem String von 100 Zeichen, da wird bei mir nichts abgeschnitten.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
const
  Names: array[0..5, 0..1] of string = (
    ('Rubble', 'Barney'),
    ('Michael', 'Johnson'),
    ('Bunny', 'Bugs'),
    ('Silver', 'HiHo'),
    ('Simpson', 'Bart'),
    ('Squirrel', 'oixlvmywmkrpqjyjxchxmrhjtufvvnmexyjyueibjbmnrvoflkvvlmylzaktffqkkjirlmgqzyhrgdgztmwuhwassofmbdsuqxdmw')
    );
 
var
  I: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
begin
  with ListView1 do
  begin
    ViewStyle := vsReport;
 
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Last';
    NewColumn := Columns.Add;
    NewColumn.Caption := 'First';
 
    for I := Low(Names) to High(Names) do
    begin
      ListItem := Items.Add;
      ListItem.Caption := Names[I][0];
      ListItem.SubItems.Add(Names[I][1]);
    end;
  end;
end; 
Wieso verwendest du hier eigentlich extractfilename ? Aber daran dürfte es nicht liegen.
Beschreibt das Beispiel oben dein Problem und wird der 100 Zeichen lange String abgeschnitten ?

[Edit] meinst du mit abgeschnitten, dass da am Ende "..." steht oder fehlen da ganze Buchstaben, auch wenn du die Column mit der Maus größer machst ?
Wenn da die drei Punkte stehen, kannst du das mit AutoSize verlängern.
So z.B. (der Rest wie oben)

Code: Alles auswählen

    NewColumn := Columns.Add;
    NewColumn.AutoSize:= True; //!
    NewColumn.Caption := '1';
 
    NewColumn := Columns.Add;
    NewColumn.AutoSize:= True; //!
    NewColumn.Caption := '2';
 
    NewColumn := Columns.Add;
    NewColumn.AutoSize:= True; //!
    NewColumn.Caption := '3';    
Wenn die Columns im Objektinspektor angelegt sind, gibt es dort die entsprechende Funktion bei der Listview unter "Columns: TListColumns" und der jeweiligen Spalte.

Mfg

Carina
Beiträge: 13
Registriert: Di 18. Jun 2013, 18:50

Re: Listview Spalteninhalt wird abgeschnitten

Beitrag von Carina »

Hmmm...nein das hilf mir leider nicht weiter, sorry.
(Leider keine ... sonst wär das Problem ja leicht gelöst :))
Ich lasse ja auch aus Edit Feldern etwas in andere Spalten der Listview eintragen, bei diesn wird nichts abgeschnitten...aber mit der Memo klappt das i.wie nicht -.-

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Listview Spalteninhalt wird abgeschnitten

Beitrag von Michl »

Füge doch mal ein Showmessage ein und überprüfe, ob deine Daten überhaupt länger als 80Zeichen sind, die du einfügen willst?!

Code: Alles auswählen

for i := 0 to Memo_Eingabe_Beschreibung.Lines.Count-1 do
   begin
     LI.SubItems.Add (Memo_Eingabe_Beschreibung.Lines.Strings[i]);
     showmessage(Memo_Eingabe_Beschreibung.Lines.Strings[i]);
     LI.SubItems.Add(extractfilename(Memo_Eingabe_Beschreibung.Lines.Strings[i]));
    end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

g3sh
Beiträge: 21
Registriert: Mi 3. Jul 2013, 10:04

Re: Listview Spalteninhalt wird abgeschnitten

Beitrag von g3sh »

Ja doch es scheint tatsächlich eine Begrenzung zu geben, die scheinbar auch gewollt ist. Bei mir liegt die aber bei 259 Zeichen (was MS auch angibt).

http://support.microsoft.com/kb/321104/de
http://www.mycsharp.de/wbb2/thread.php?threadid=107336

Eine komplizierte Lösung wäre die Listview mehrzeilig zu machen: http://www.delphipraxis.net/113847-tlis ... eilig.html
(ob die Zeichenbegrenzung dadurch umgangen wird weiß ich aber nicht...)

Oder auf eine andere Komponente umzusteigen, die Beste alternative wäre wahrscheinlich hier die http://wiki.freepascal.org/VirtualTreeview/de


[Edit] Wenn es wirklich nur 80 Zeichen sind, ist vielleicht auch der Zeilenumbruch vom Memo schuld. Setze mal

Code: Alles auswählen

Memo_Eingabe_Beschreibung.WordWrap := False;
und versuche es dann nochmal.

MfG

Carina
Beiträge: 13
Registriert: Di 18. Jun 2013, 18:50

Re: Listview Spalteninhalt wird abgeschnitten

Beitrag von Carina »

g3sh hat geschrieben: Wenn es wirklich nur 80 Zeichen sind, ist vielleicht auch der Zeilenumbruch vom Memo schuld. Setze mal

Code: Alles auswählen

Memo_Eingabe_Beschreibung.WordWrap := False;
und versuche es dann nochmal.

MfG

danke, damit klappts ;)

Antworten