![]() |
mehrzeiliges TListView
Tach...
Wenn eine Caption / Subitem zu lan ist, wird es vom ListView mit 3 Punkten abgekürzt. Wie schaffe ich nun, ein StingList in einem TListItem darzustellen ... also eben ein mehrzeiliges TListView?? MfG && Thx |
Re: mehrzeiliges TListView
Zitat:
|
Re: mehrzeiliges TListView
Du kannst für Zeilenumbrüche die API-Routinen benutzen.
Etwa so:
Delphi-Quellcode:
Dabei gibt Handle das Objekt an, auf das du zeichnest und Rect den Zeichenbereich.
// Vorher Hintergrund in gewünschter Farbe füllen und Schrift evtl. einstellen.
ListView.Canvas.FillRect(Rect); // mit API-Funktion Text ausgeben, der umbrochen wird DrawText(ListView.Canvas.Handle, PChar(DerText), -1, Rect, DT_LEFT or DT_WORDBREAK); Ich meine mich zu erinnern, dass du mit DT_CALCRECT die Höhe automatisch ermitteln kannst, so dass du das Rectangle nicht selbst berechnen musst. Es gibt auch noch ein Kürzel (weiß grad nicht wie es heißt), um z.B. auch umbrochenen Text der zu lang ist, mit den Pünktchen (...) zu versehen. Gruß Pfoto |
Re: mehrzeiliges TListView
Tach...
Delphi-Quellcode:
So schaut der Code bis jetzt aus ... funktioniert allerdings nicht. Wenn ich mit der Maus über den entsprechenden Eintrag fahre, wird der urspüngliche Text (also der, der dem Item als Caption beim einfügen zugewiesen wurde) angezeigt, allerdings wird der Text "Test 3" nicht als Anzeigetext in im Listview angezeigt.
procedure TfInfoView.lvTasksDrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); begin DrawText(Sender.Canvas.Handle, PChar('TEST 3'), 1, Rect, DT_LEFT or DT_WORDBREAK or DT_CALCRECT); end; Wo könnte der Fehler liegen? MfG |
Re: mehrzeiliges TListView
Probiers mal so:
Delphi-Quellcode:
Bei Nullterminierten String musst du "-1" als dritten Parameter angeben, andernfalls die Anzahl Zeichen, die zu zeichnen lassen möchtest.
procedure TfInfoView.lvTasksDrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState); begin DrawText(Sender.Canvas.Handle, PChar('TEST 3'), -1, Rect, DT_LEFT or DT_WORDBREAK or DT_CALCRECT); end; Gruß Pfoto |
Re: mehrzeiliges TListView
Hallo,
wenn Du den Typ DT_CALCRECT angibts, wird auch nichts gezeichnet. Siehe auch |
Re: mehrzeiliges TListView
Tach...
tja, vieleicht hätte ich nicht nur mal kurz die Funktion im msdn überfliegen sollen ... tja, jetzt wirds ausgegeben, nur eben nicht mehrzeilig ... dann muss ich nachher nochmal genau nachlesen! Ist der Bereich, denn Rect enthält die maximale Fläche, auf der ich Zeichnen darf, oder kann ich mir die auch größer machen? Was passiert wenn das ListView etliche Items enthält, die am Anfang (also wenn der Scrollbalken ganz oben steht) noch garnicht angezeigt sind? MfG |
Re: mehrzeiliges TListView
Nabend ...
So Text wird nun mehrzeilig ausgegeben. Allerdings hab ich jetzt ein neues Problem: Ich hab die Eigenschaft GridLines aktiviert und dass sieht nun so aus, als ob jeder zeilenumbruch ein neues Item ist ... d.h die Abstände der Gridlines sind immer gleich groß, obwohl sie je nach Zeilenanzahl pro Item verschieden sein müssten... MfG |
Re: mehrzeiliges TListView
so ganz spontan würde ich sagen: Deaktiviere sie und zeichne sie im OnDraw-Ereignis einfach nach deinen Wünschen selbst!
Oder spricht etwas dagegen? Gruß Pfoto |
Re: mehrzeiliges TListView
Hallo,
ich muss diese Thread leider nochmal ausgraben, weil ich ein ähnliches Problem habe. Ich möchte mehrzeiligen Text in eine Zelle schreiben. Zitat:
Gruß, Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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 by Thomas Breitkreuz