Ver Mensaje Individual
  #4  
Antiguo 10-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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);

    // Si tenemos el foco, lo dibujamos nostros 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