AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mehrzeiliges TListView

Ein Thema von maynard · begonnen am 19. Dez 2005 · letzter Beitrag vom 29. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#1

mehrzeiliges TListView

  Alt 19. Dez 2005, 04:09
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
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#2

Re: mehrzeiliges TListView

  Alt 19. Dez 2005, 05:53
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.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: mehrzeiliges TListView

  Alt 19. Dez 2005, 09:58
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
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: mehrzeiliges TListView

  Alt 19. Dez 2005, 20:01
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
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: mehrzeiliges TListView

  Alt 19. Dez 2005, 23:07
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
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: mehrzeiliges TListView

  Alt 20. Dez 2005, 07:02
Hallo,

wenn Du den Typ DT_CALCRECT angibts, wird auch nichts gezeichnet. Siehe auch
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: mehrzeiliges TListView

  Alt 20. Dez 2005, 15:41
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
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: mehrzeiliges TListView

  Alt 20. Dez 2005, 22:41
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
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: mehrzeiliges TListView

  Alt 21. Dez 2005, 07:25
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
Jürgen Höfs
  Mit Zitat antworten Zitat
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#10

Re: mehrzeiliges TListView

  Alt 2. Mai 2006, 09:59
Hallo,

ich muss diese Thread leider nochmal ausgraben, weil ich ein ähnliches Problem habe. Ich möchte mehrzeiligen Text in eine Zelle schreiben.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
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