Seguro que hay alguna opción para que windows no dibuje el rectángulo del foco, pero como no tengo ganas de buscarla ahora
, podemos hacer lo siguiente. El rectángulo del foco se dibuja invirtiendo el color del fondo, pues bien, si nosotros lo dibujamos primero una inversión anula a la otra:
Código Delphi
[-]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with Control as TListBox do
begin
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color:= clGray;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Color := clRed;
Canvas.Pen.Width := 1;
if odSelected in State then
Canvas.Rectangle(Rect)
else
Canvas.FillRect(Rect);
if odFocused in State then
Canvas.DrawFocusRect(Rect);
Canvas.Font.Color := clBlack;
Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
end;
end;