| Autor | Beitrag | 
| Addy88 
          Beiträge: 19
 
 Win XP, Win 7
 
 
 | 
Verfasst: Di 19.01.10 21: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 22: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: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 19.01.10 22:18 
 | 
|  | 
| Addy88  
          Beiträge: 19
 
 Win XP, Win 7
 
 
 | 
Verfasst: Di 19.01.10 22: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: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 19.01.10 22: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 08:38 
 
Äh und jetzt noch mal für mich, wie genau ruf ich invalidate auf? | 
|  | 
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mi 20.01.10 09:45 
 | 
|  | 
| Addy88  
          Beiträge: 19
 
 Win XP, Win 7
 
 
 | 
Verfasst: Mi 20.01.10 09:48 
 
OK danke. Da hätte ich auch alleine drauf kommen können -.- | 
|  | 
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mi 20.01.10 09: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). | 
|  |