![]() |
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? |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Du könntest versuchen mie Länge der Teilstrings anpassen auf Breite / (Breite pro Zeichen)
|
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Hi,
Zitat:
|
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.
|
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Ich stehe auf dem Schlauch.
Hast du ne Beispielzeile Code fuer mich? Danke! |
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:
Grüße vom marabu
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; |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Danke Marabu,
aber was ist denn drlabel? |
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.
|
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? |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
drLabel ist eine Konstante füt TDisplayCode für den Parameter Code von TListItem.DisplayRect
|
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Ah,
muss man ja schliesslich wissen... Dank Dir! :???: |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
In der Delphi-Hilfe kannst du auch lesen, was sie (Konstante) als Parameter bewirkt
|
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? |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Was funktioniert nicht? Hast du beide Vorkommen von Item ersetzt?
|
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Guten Morgen.
Für ein SubItem nimmt man nicht OnCustomDrawItem:
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Hi Marabu,
werde das heute abend gleich mal ausprobieren. Hab vielen Dank fuer den Code! |
Re: Wie Punkte hinter ListView Eintraegen abschneiden?
Hi,
hab den Code eben mal versuchen wollen aber in welcher Unit sind denn
Delphi-Quellcode:
und
LVIR_LABEL
Delphi-Quellcode:
drin?
LVM_GETSUBITEMRECT
//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