Entwickler-Ecke
Sonstiges (Delphi) - Listview CustomDrawItem Procedure in einer anderen aufrufen
Addy88 - Di 19.01.10 22:17
Titel: Listview CustomDrawItem Procedure in einer anderen aufrufen
Hallo liebe Gemeinde,
ich hab mal ne Frage die wahrscheinlich schnell und einfach beantwortet ist.
Und zwar möchte ich die ListViewCustomDrawItem Procedure aus einer anderen aufrufen, leider weiß ich nicht wirklich welche Parameter ich übergeben muss.
Sieht bei mir momentan so aus:
Delphi-Quelltext
1:
| Form1.ListView1CustomDrawItem(nil,nil,nil,true); |
Allerdings funktioniert das so nicht (wer hätte das gedacht :D )
Bekomme immer diese Fehlermeldung beim compilieren:
Inkompatible Typen: 'TCustomDrawState' und 'Pointer'
Wäre Klasse wenn mir jemand sagen könnte welche Parameter ich übergeben muss.
Vielen Dank im voraus.
Moderiert von
Narses: Delphi-Tags hinzugefügt
Xentar - Di 19.01.10 23:04
Gegenfrage: Wozu?
Die Prozedur wird doch automatisch aufgerufen, wenn es Zeit ist, das Ding neu zu malen.
jaenicke - Di 19.01.10 23:18
Addy88 hat folgendes geschrieben : |
Und zwar möchte ich die ListViewCustomDrawItem Procedure aus einer anderen aufrufen, leider weiß ich nicht wirklich welche Parameter ich übergeben muss. |
Lagere einfach den Code, den du mehrfach benutzen willst, in eine gemeinsam benutzte Prozedur auf mit eigenen Parametern. Dann kannst du diese sowohl von ListViewCustomDrawItem als auch von woanders aufrufen. ;-)
Addy88 - Di 19.01.10 23:24
Hmm klingt einleuchtend aber ich hab eine Prozedur "aktualisieren" welche den Inhalt des ListViews nach Änderungen in einer Datenbank aktualisiert.
Jetzt wollte ich in dieser procedure eben die Customdraw procedure aufrufen um falls ein bestimmter wert gesetzt ist diese aktuelle Zeile eingefärbt wird.
Oder ist das direkt der falsche Ansatz?
Sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure aktualisieren; Form1.nichtda:=Form4.SQLQuery1.FieldByName('nichtda').AsString; Form1.zaehler:=0; Form1.ListView1CustomDrawItem(Form1.ListView1,Form1.zaehler,nil,true);
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin if nichtda = 'true' then begin if item.Index=Form1.zaehler THEN begin Sender.Canvas.Brush.Color := clRed; Sender.Canvas.Font.Color := clBlack; DefaultDraw := True; end; end; end; |
Wenn ich da einen denkfehler habe, sag mir bitte wo der liegt und wie ich es anders machen kann.
Danke
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Di 19.01.10 23:46
Wenn du den Inhalt neuzeichnen lassen willst, dann musst du nur Invalidate aufrufen. ;-)
Addy88 - Mi 20.01.10 09:38
Äh und jetzt noch mal für mich, wie genau ruf ich invalidate auf?
jaenicke - Mi 20.01.10 10:45
Wie meinst du das? :nixweiss:
Delphi-Quelltext
1:
| YourListView.Invalidate; |
Addy88 - Mi 20.01.10 10:48
OK danke. Da hätte ich auch alleine drauf kommen können -.-
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!