Delphi-PRAXiS

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 Wie Punkte hinter ListView Eintraegen abschneiden? (https://www.delphipraxis.net/67619-wie-punkte-hinter-listview-eintraegen-abschneiden.html)

Mackhack 17. Apr 2006 18:30


Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi,

Wie kann ich es realisieren dass die Eintraege in einer ListView keine ... haben wenn die ColumnWidth nicht breit genug ist um den Eintrag vollstaendig anzeigen zu lassen.

Mit Copy/Pos/Del abschneiden? Oder gehts auch einfacher?

mkinzler 17. Apr 2006 19:02

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Du könntest versuchen mie Länge der Teilstrings anpassen auf Breite / (Breite pro Zeichen)

Mackhack 17. Apr 2006 19:14

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi,

Zitat:

Zitat von mkinzler
Du könntest versuchen mie Länge der Teilstrings anpassen auf Breite / (Breite pro Zeichen)

wie meinst du das mit Anpassen? Etwa die Spaltengroesse? Wenn ja, dann muss ich leider sagen dass das net geht da ich verhindern will dass eine horizontale Scrollbar erscheint aber die ... mich stoeren!

mkinzler 17. Apr 2006 19:20

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Nein nicht die Spaltengröße, sondern die Länge der Strings (Items). Sind diese < 255 Zeichen sind dies ShortStrings, bei welchen an Stelle 0 die Länge des Strings steht. man kann also einfach die Länge anpassen, ohne das der Originalinhalt verloren get.

Mackhack 17. Apr 2006 19:24

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Ich stehe auf dem Schlauch.

Hast du ne Beispielzeile Code fuer mich?

Danke!

marabu 17. Apr 2006 20:36

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Eigentlich finde ich die Ellipsis am Ende des abgeschnittenen Textes korrekt - aber vielleicht hilft dir das hier weiter:

Delphi-Quellcode:
procedure TDemoForm.ListViewCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  r: TRect;
begin
  r := Item.DisplayRect(drLabel);
  Sender.Canvas.TextRect(r, r.Left + 2, r.Top + 2, Item.Caption);
  DefaultDraw := false;
end;
Grüße vom marabu

Mackhack 17. Apr 2006 20:53

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Danke Marabu,

aber was ist denn drlabel?

mkinzler 17. Apr 2006 20:59

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Ich habe mal meinen (theoetischen) Vorschlag praktisch ausprobiert und vestellen müssen, das es nicht ganz so geht, da man die Länge der Items nicht mit setLength manipulieren kann. Man kann dies zwar umgehen, aber es ist sehr unellegant. Außerdem gibt es keinen Event für das Resizen der Columns. Deshalb mußt du wohl mit den ... leben müssen oder Achims Vorschalg ausprobieren.

Mackhack 17. Apr 2006 21:07

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi,

werde ich dann :-)

Jedoch habe ich das in einem anderen Programm bereits gesehen dass die ein ListView nehmen und es auch keine ... gibt!

Danke euch vielmals!

//Edit: Kann mir noch schnell wer sagen was das drlabel ist?

mkinzler 17. Apr 2006 21:13

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
drLabel ist eine Konstante füt TDisplayCode für den Parameter Code von TListItem.DisplayRect

Mackhack 17. Apr 2006 22:43

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Ah,

muss man ja schliesslich wissen... Dank Dir! :???:

mkinzler 17. Apr 2006 22:46

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
In der Delphi-Hilfe kannst du auch lesen, was sie (Konstante) als Parameter bewirkt

Mackhack 18. Apr 2006 05:32

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi ihr,

die Funktion funzt soweit nur macht sie nicht so recht was ich will. Ich habe jetzt nur noch die Caption im ListView und alles andere ist weg. Jedoch habe ich noch 8 SubItems. Der zu lange Text ist eigentlich nur im SubItem[0]. Jedoch hab ich versucht es mit Item.SubItem[0] zu loesen, was nicht funktioniert hat.

Wo steckt mein Denkfehler?

mkinzler 18. Apr 2006 05:46

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Was funktioniert nicht? Hast du beide Vorkommen von Item ersetzt?

marabu 18. Apr 2006 08:23

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Guten Morgen.

Für ein SubItem nimmt man nicht OnCustomDrawItem:

Delphi-Quellcode:
procedure TDemoForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  r: TRect;
begin
  DefaultDraw := SubItem <> 1; // Lösung für erstes SubItem
  // DefaultDraw := SubItem > Item.SubItems.Count; // allgemeine Lösung
  if not DefaultDraw then
  begin
    r.Top := SubItem;
    r.Left := LVIR_LABEL;
    Sender.Perform(LVM_GETSUBITEMRECT, Item.Index, Integer(@r));
    Sender.Canvas.TextRect(r, r.Left + 2, r.Top + 2, Item.SubItems[Pred(SubItem)]);
  end;
end;
Grüße vom marabu

Mackhack 18. Apr 2006 17:03

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi Marabu,

werde das heute abend gleich mal ausprobieren. Hab vielen Dank fuer den Code!

Mackhack 23. Apr 2006 05:43

Re: Wie Punkte hinter ListView Eintraegen abschneiden?
 
Hi,

hab den Code eben mal versuchen wollen aber in welcher Unit sind denn

Delphi-Quellcode:
LVIR_LABEL
und
Delphi-Quellcode:
LVM_GETSUBITEMRECT
drin?

//Edit: Hätte ich auch selbst draufkommen können: Steht in der Unit CommCtrl drin!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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