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!