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 mehrzeiliges TListView (https://www.delphipraxis.net/59183-mehrzeiliges-tlistview.html)

maynard 19. Dez 2005 04:09


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

Pichel 19. Dez 2005 05:53

Re: mehrzeiliges TListView
 
Zitat:

Zitat von maynard
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??

Also mir fällt dazu nur ein, das ganze auf OwnerDraw := True zu stellen und im OnDrawItem Event dann das Gewünschte direkt auf den Canvas zu zeichnen.

Pfoto 19. Dez 2005 09:58

Re: mehrzeiliges TListView
 
Du kannst für Zeilenumbrüche die API-Routinen benutzen.

Etwa so:
Delphi-Quellcode:
// 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);
Dabei gibt Handle das Objekt an, auf das du zeichnest und Rect den Zeichenbereich.
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

maynard 19. Dez 2005 20:01

Re: mehrzeiliges TListView
 
Tach...

Delphi-Quellcode:
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;
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.
Wo könnte der Fehler liegen?

MfG

Pfoto 19. Dez 2005 23:07

Re: mehrzeiliges TListView
 
Probiers mal so:

Delphi-Quellcode:
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;
Bei Nullterminierten String musst du "-1" als dritten Parameter angeben, andernfalls die Anzahl Zeichen, die zu zeichnen lassen möchtest.


Gruß
Pfoto

Gollum 20. Dez 2005 07:02

Re: mehrzeiliges TListView
 
Hallo,

wenn Du den Typ DT_CALCRECT angibts, wird auch nichts gezeichnet. Siehe auch

maynard 20. Dez 2005 15:41

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

maynard 20. Dez 2005 22:41

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

Pfoto 21. Dez 2005 07:25

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

oXmoX 2. Mai 2006 09:59

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:

Zitat von maynard
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?

...Genau das frag ich mich auch grade! Um mehrer Zeilen pro Zelle verwenden zu können, muss ich doch zunächst einmal die Zeilenhöhe vergrößern. Sonst würde man doch sowieso nur die erste Zeile sehen können. Wie kann ich denn die Zeilenhöhe anpassen?

Gruß,
Jan


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