Thema: Delphi Listbox Refresh-Problem

Einzelnen Beitrag anzeigen

andianon

Registriert seit: 2. Dez 2003
Ort: Wechselnd
28 Beiträge
 
Delphi 5 Enterprise
 
#1

Listbox Refresh-Problem

  Alt 15. Dez 2003, 09:50
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;
  Mit Zitat antworten Zitat