Ver Mensaje Individual
  #2  
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
Si quieres dibujar un rectángulo debes de usar Rectangle, ya que DrawFocusRect siempre se dibuja igual independiente de los valores que asignes al canvas. Por otro lado no hace falta que crees un Pen y Canvas nuevos cada vez, sobre todo porque luego no los destruyes y quedan en memoria. Bueno yo lo haría así:

Código Delphi [-]
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TListBox do
  begin
    // Usamos el Brush y el Pen del propio canvas
    Canvas.Brush.Style := bsSolid;
    Canvas.Pen.Style := psSolid;
    Canvas.Pen.Color := clRed;
    Canvas.Pen.Width := 1;
    
    // Aqui compruebo si esta seleccionado
    if odSelected in State then
    begin
      // Si lo esta dibujo un rectangulo, el borde con el valor de Pen
      // y el interior con el valor de Brush
      Canvas.Brush.Color:= clGray;
      Canvas.Rectangle(Rect);
    end else
    begin
      // Si no lo esta solo dibujo el interior con el valor del Brush
      Canvas.Brush.Color:= clWhite;
      Canvas.FillRect(Rect);
    end;

    Canvas.Font.Color := clBlack;
    Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, Items[Index]);
  end;
end;
Responder Con Cita