Ver Mensaje Individual
  #1  
Antiguo 10-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cambiar el rectángulo de Foco en un TListBox

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;
Responder Con Cita