![]() |
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? |
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 ... |
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? |
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 |
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. |
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. |
Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
Zitat:
Meinst du es ist ein Versionsbug? |
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 |
Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie
![]() 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. |
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:
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.
if SubItem = 4 then
Sender.Canvas.Brush.Color:= clBlue else Sender.Canvas.Brush.Color:= graphics.clBtnHighlight |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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