AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wo bekomme ich Rect bei OnCustomDrawSubItem von TListView?
Thema durchsuchen
Ansicht
Themen-Optionen

Wo bekomme ich Rect bei OnCustomDrawSubItem von TListView?

Ein Thema von Popov · begonnen am 25. Jul 2008 · letzter Beitrag vom 29. Jul 2008
Antwort Antwort
Seite 1 von 3  1 23      
Popov
(Gast)

n/a Beiträge
 
#1

Wo bekomme ich Rect bei OnCustomDrawSubItem von TListView?

  Alt 25. Jul 2008, 21:07
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?
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#2

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 25. Jul 2008, 22:27
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
...
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 25. Jul 2008, 22:43
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 26. Jul 2008, 19:44
Hallo,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 26. Jul 2008, 23:30
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.
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#6

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 27. Jul 2008, 05:38
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 27. Jul 2008, 13:32
Zitat von extrem:
Welche Delphiversion hast du?
Delphi 7

Meinst du es ist ein Versionsbug?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 27. Jul 2008, 14:13
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 27. Jul 2008, 17:57
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.
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#10

Re: Wo bekomme ich Rect bei OnCustomDrawSubItem von TListVie

  Alt 27. Jul 2008, 18:30
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 22:07 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