![]() |
Listbox Refresh-Problem
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; |
Re: Listbox Refresh-Problem
Hab gerade nicht die Möglichkeit das auszuprobieren, aber eigentlich müsste ein einfaches "DeineListbox.Repaint;" doch ausreichen.
|
Re: Listbox Refresh-Problem
Das Problem ist, dass durch Repaint usw. auch wieder OnDrawItem aufgerufen wird und da beißt sich der Hund dann in den Schwanz.
|
Re: Listbox Refresh-Problem
Zitat:
|
Re: Listbox Refresh-Problem
Ich habe mir jetzt erstmal damit beholfen, dass ich in der OnClick-Methode, die ich bisher nicht eh nicht benötige, jetzt ein "ListBox.Invalidate", eingebaut habe, aber schön ist was anderes.
|
Re: Listbox Refresh-Problem
HYHO!
Nehmen wir mal an, Du willst einen total mit Graffity besprühten Brückenpfeiler neu bemalen. Was machst Du dann vorher? :mrgreen:
Delphi-Quellcode:
Viele Grüsse
procedure TForm1.LBDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin if (odFocused in State) Or (odSelected in State) then Begin LB.Canvas.Brush.Color := clHighlight; LB.Canvas.Font.Color := clHighlightText End else Begin LB.Canvas.Brush.Color := clWindow; LB.Canvas.Font.Color := clWindowText; End; LB.Canvas.FillRect(Rect); LB.Canvas.TextOut(Rect.Left, Rect.Top,LB.Items[Index]); end; OLLI |
Re: Listbox Refresh-Problem
Danke, das funzt!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz