Ver Mensaje Individual
  #4  
Antiguo 23-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Reputación: 18
aeff Va camino a la fama
bueno, tengo una propuesta para que me la rectifiquen, es una prueba mi objetivo era eliminar el parpadeo, de la forma siguiente ya no ocurre pero necesito saber si esta forma es optimizada o no es conveniente,

Código Delphi [-]
type
  TXCustomCheckBox = class (TCustomCheckBox)
  protected
    st: Integer;
    procedure CreateParams(var Param: TCreateParams);
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
    procedure BMSetChecked(var Message: TMessage); message BM_SETCHECK;
    procedure BMSetState(var Msg: Tmessage); message BM_SETSTATE;
  public
    constructor Create(aOwner: TComponent); override;

  end;

implementation

  constructor TXCustomCheckBox.Create(aOwner: TComponent);
  begin
    inherited;
  end;

  procedure TXCustomCheckBox.BMSetState(var Msg: Tmessage);
  begin
    Inherited;
    Invalidate;
  end;

  procedure TXCustomCheckBox.CreateParams(var Param: TCreateParams);
  begin
    inherited;
    Param.Style := Param.Style or BS_OWNERDRAW;
  end;

  procedure TXCustomCheckBox.BMSetChecked(var Message: TMessage);
  begin
    inherited;
    Invalidate;
    st := Message.WParam;
  end;

  procedure TXCustomCheckBox.WMPaint(var Message: TWMPaint);
  var
    Canvas: TCanvas;
    vPaint: TPaintStruct;
  begin
    BeginPaint(Handle, vPaint);
    Canvas := TCanvas.Create;
    Canvas.Handle := GetDc(Handle);
    Canvas.FillRect(Canvas.ClipRect);
    case st of
      0:Canvas.TextOut(1,1,'a');
      1:Canvas.TextOut(1,1,'b');
    end;
    EndPaint(Handle, vPaint);
  end;

espero que me den sus criterios colegas, mil gracias de antemano,

saludos!
aeff!
Responder Con Cita