Probablemente este truco pueda servir para otros controles. Se trata de cambiar el rectángulo que aparece alrededor de un elemento seleccionado en un "TListBox", en este caso:
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:= clWhite;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Color := clRed;
Canvas.Pen.Width := 1;
if odSelected in State then
Canvas.Rectangle(Rect)
else
Canvas.FillRect(Rect);
/*
Aquí está la clave del asunto:
Si tenemos el foco, lo dibujamos nosotros primero
*/
if odFocused in State then
Canvas.DrawFocusRect(Rect);
Canvas.Font.Color := clBlack;
Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
end;
end;