Hallo,
ich habe bei einer Software das gleiche Problem.
Den Vorschlag mit
Sender.Canvas.Brush.Style := bsClear;
hab ich ausprobiert, nur leider ohne Erfolg.
Das dumme ist, dass das Problem auf meinem Win8-Rechner nicht mehr auftaucht - nur auf meinem (neuen)
Win7-Rechner in der Firma (und kann es somit nicht testen)
Hab ich das
Sender.Canvas.Brush.Style := bsClear;
an der falschen Stelle drin oder generell einen
Fehler diesbezüglich?
Bei XP hat es bislang ohne dieser Zeile funktioniert (danach anscheinend auch wieder)
Delphi-Quellcode:
procedure TMainForm.ListView_DateienCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
S_Text : String;
Diff_Top : Integer;
Rect : TRect;
Textfarbe : TColor;
begin
//Rect der Zelle erhalten
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @Rect);
Sender.Canvas.Brush.Style := bsClear;
//Hintergrundfarbe
Sender.Canvas.Brush.Color := clWindow;
//Farbe?
If ListViewTextFarbe(Textfarbe, S_Text, Item.SubItems[SubItem - 1]) then
begin
//Schriftfarbe
Sender.Canvas.Font.Color := Textfarbe;
//Hintergrundfarbe und Textfarbe setzen, wenn die Zeile markiert ist
If Item.Selected then
begin
Sender.Canvas.Font.Color := clHighlightText;
Sender.Canvas.Brush.Color := clHighlight;
end;
//Differenz für Top berechnen, um Text mittig darzustellen
Diff_Top := (Rect.Height - Sender.Canvas.TextHeight(S_Text)) div 2;
//Text ausgeben
Sender.Canvas.TextRect(Rect, Rect.Left + 5, Rect.Top + Diff_Top, S_Text);
DefaultDraw := False;
end;
end;
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<