Autor |
Beitrag |
Addy88
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Di 19.01.10 22:17
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  )
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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Di 19.01.10 23:04
Gegenfrage: Wozu?
Die Prozedur wird doch automatisch aufgerufen, wenn es Zeit ist, das Ding neu zu malen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 19.01.10 23:18
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 19.01.10 23:46
Wenn du den Inhalt neuzeichnen lassen willst, dann musst du nur Invalidate aufrufen. 
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Mi 20.01.10 09:38
Äh und jetzt noch mal für mich, wie genau ruf ich invalidate auf?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 20.01.10 10:45
|
|
Addy88 
      
Beiträge: 19
Win XP, Win 7
|
Verfasst: Mi 20.01.10 10:48
OK danke. Da hätte ich auch alleine drauf kommen können -.-
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 20.01.10 10:51
Wobei das die gesamte ListView neu zeichnet. Für einzelne Items gibt es ListView_RedrawItems oder YourListView.Items[YourItem].Update (wobei ich letzteres nie ausprobiert habe).
|
|