Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Wo bekomme ich Rect bei OnCustomDrawSubItem von TListView? (https://www.delphipraxis.net/117825-wo-bekomme-ich-rect-bei-oncustomdrawsubitem-von-tlistview.html)

Popov 25. Jul 2008 20:07


Wo bekomme ich Rect bei OnCustomDrawSubItem von TListView?
 
Ich hab vor in ListView in einer Spalte etwas zu zeichnen. Soweit ist ja alles vorhanden, nur der Rect-Wert des SubItems fehlt mir.

Kann mir einer sagen wie ich an den drankomme?

extrem 25. Jul 2008 21:27

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Eine Möglichkeit wäre mit ListView_GetSubItemRect.
Delphi-Quellcode:
...
var
  SubItemRect: TRect;
begin
  if CommCtrl.ListView_GetSubItemRect(Sender.Handle, item.Index, 1, LVIR_LABEL, @SubItemRect) then
...

Popov 25. Jul 2008 21:43

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Ach, da kommt ListView_GetSubItemRect her. Die Funktion ist mir bei der Suche im Internet schon öfters aufgefallen, aber ich konnte sie nirgendwo zuordnen, da sie ohne CommCtrl nicht funktioniert und in keinem Beispiel auf die Unit hingewiesen wurde. Hats mir auf jeden Fall sehr geholfen.

Ähm, wo wir schon dabei sind, sehe gerade etwas, du weißt nicht zufällig wieso nach dem Einsatz in OnCustomDrawSubItem die restlichen SubItems fett geschrieben werden?

marabu 26. Jul 2008 18:44

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Hallo,

vielleicht hast du den Font-Style in einer deiner CustomDraw-Routinen verändert und nicht wieder zurückgesetzt.

Grüße vom marabu

Popov 26. Jul 2008 22:30

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Eigentlich nicht. Ich greife nur auf OnCustomDrawSubItem zu und dort nur auf eine Spalte. Und in der Zeichne ich nur ein Rechteck.

Die Folge ist, daß alle Spalten danach fette Schrift (eventuell auch Terminal Schrift die nur fett aussieht) haben.

extrem 27. Jul 2008 04:38

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Welche Delphiversion hast du?

Das Phänomen tritt anscheinend nur bei Versionen kleiner Delphi 10 auf, wenn man versucht auf dem Canvas des TListView zu zeichnen.

Popov 27. Jul 2008 12:32

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Zitat:

Zitat von extrem
Welche Delphiversion hast du?

Delphi 7

Meinst du es ist ein Versionsbug?

marabu 27. Jul 2008 13:13

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Hallo,

unter D7 kann man bei den Ereignissen OnCustomDrawItem() und OnCustomDrawSubItem() nur Konfigurationen vornehmen, keine Canvas-Ausgaben - es sei denn man schaltet DefaultDrawing aus und malt alles selbst.

Eines verstehe ich nicht: Wenn du Rectangle() für ein SubItem verwendest, dann musst du doch sowieso selbst malen, sonst wischt dir das DefaultDrawing doch alles wieder weg.

Ich würde lediglich den Hintergrund einfärben und auf den Rahmen verzichten - da erspart man sich eine Menege an Arbeit.

Freundliche Grüße

Popov 27. Jul 2008 16:57

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
http://img513.imageshack.us/img513/8189/drawli5.png

Vier 4 Beispiele.

EDIT Anfang: in allen Beispielen soll ein Rechteck in der fünften Spalte gezeichnet werden. In den ersten drei Beispielen wird zwar der Hintergrund verändert, aber kein Rechteck gezeichnet. Es geht in den ersten drei Beispielen nicht drum nur den Hintergrund zu ändern. EDIT Ende.

Die ersten drei mit DefaultDraw := True;.

Im ersten Beispiel ist der Text ok. In der fünften Spalte mit der Grafik hat der Hintergrund die Farbe von Brush.Color angenommen. Es wird auch in der sechsten leeren Spalte der Hintergrund verändert, obwohl die das nichts ein soll.

Im zweiten Beispiel fehlt die sechste Spalte. Dafür werden alle Texte in einer anderen Schrift geschrieben.

Im dritten Beispiel habe ich eine sechste und siebte Spalte erstellt, dieses Mal mit Text. Alle Texte vor der fünten Spalte haben jetzt normale Schrift, dafür haben die sechste und siebte Spalte eine falsche Schrift.


Im vierten Beispiel mit DefaultDraw := False;.

Die Grafik wird korrekt gezeichnet, aber die Texte davor werden nicht ausgegeben.

extrem 27. Jul 2008 17:30

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
 
Für die erste 3 brauchst du doch eigentlich nicht auf dem TCanvas zeichnen, sondern nur die Farbe vom Hintergrund ändern.

Delphi-Quellcode:
  if SubItem = 4 then
    Sender.Canvas.Brush.Color:= clBlue
  else
    Sender.Canvas.Brush.Color:= graphics.clBtnHighlight
Nur beim 4. Beispiel müsstest du wegen dem Rahmen auf dem TCanvas zeichnen. Außerdem müsstest du doch auch dann die Subitems abfragen und je nach dem DefaultDraw aktivieren oder nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 3  1 23      

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