Ich möchte abhängig von dem Zustand eines Objektes, die Zeilenfarbe der Listbox festlegen. Klappt auch über die OnDrawItem-Methode ganz gut. Wenn jetzt eine Zeile selektiert wird, wird diese mit der Schriftfarbe weiß dargestellt. Wählt man eine andere Zeile, wird die vorher gewählte zwar per Source wieder auf die eigentliche Farbe gesetzt, aber es erfolgt kein Refresh auf dem Screen, d.h., jede gewählte Zeile bleibt solange weiß, bis sie z.B. einmal aus dem sichtbaren Bereich heraus- und wieder hereingescrollt wurde.
Hilfe!!!
Delphi-Quellcode:
procedure TfGrundrisse.clbBehOrteDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
behort : TAdmBehandlungsort;
gsSet : TGueltigStati;
begin
// Behandlungsortobjekt in der aktuellen Zeile ermitteln
try
behort := TAdmBehandlungsort(clbBehOrte.Items.Objects[Index]);
except
behort := nil;
end;
if Assigned(behort) then begin
// Wenn die Zeile disabled ist,...
if not clbBehOrte.ItemEnabled[Index] then
clbBehOrte.Canvas.Font.Color := clGrayText
// Wenn die Zeile enabled ist,...
else begin
// GueltigStati für den BehOrt ermitteln
gsSet := self.sHaus.AdmHausstruktur.GetGueltigStati4BehOrt(behort.ID);
// Wenn der Behandlungsort abgelaufen ist,...
if gsSet = [gsAbgelaufen] then
clbBehOrte.Canvas.Font.Color := clRed
else begin
// Wenn die darzustellende Zeile die ausgewählte ist,...
if clbBehOrte.ItemIndex = Index then
clbBehOrte.Canvas.Font.Color := clHighlightText
else
clbBehOrte.Canvas.Font.Color := clWindowText;
end;
end;
clbBehOrte.Canvas.TextOut(Rect.Left, Rect.Top, behort.ID);
end;
end;