2007. április 13., péntek
How to change the default highlight color of a TListBox
Problem/Question/Abstract:
Can anyone tell me how to change the default highlight color used in a TListBox? I need it to be clAqua instead of the standard Navy as the text in the listbox is made other colors in the OwnerDraw and you can't read some of them with the Navy selection color.
Answer:
Solve 1:
Check the 'State' parameter in the DrawItem event. It lets you know if the item is selected. If it is then use a different brush color.
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
if odSelected in State then
ListBox1.Canvas.Brush.Color := clAqua;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
end;
Solve 2:
Set Style := lbOwnerDrawFixed and OnDrawItem := ListBoxDrawItem; . Remove the last line from the example if you want to have the focus rectangle.
procedure TListBox.ListBoxDrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
State: TOwnerDrawState);
begin
if (odSelected in State) then
Canvas.Brush.Color := clBlue
else
Canvas.Brush.Color := Color;
Canvas.FillRect(Rect);
Canvas.Font := Font;
SetTextAlign(Canvas.Handle, TA_LEFT or TA_TOP or TA_NOUPDATECP);
ExtTextOut(Canvas.Handle, Rect.Left + 2, Rect.Top + 1, ETO_CLIPPED or ETO_OPAQUE, @Rect,PChar(Items[Index]), Length(Items[Index]), nil);
if (odSelected in State) then
DrawFocusRect(Canvas.Handle, Rect);
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése