Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
crear un tcheckbox con un skin

SALUDOS

resulta ser que desde hace algun tiempo estoy programando componentes basandome en los estandars para aplicarles una especie de skin, la cual es simple practicamente, consiste en pintar mi propio estilo usando el canvas de los mismos, hace ya unos dias se me presentaron dudas para conformar mi nuevo TButton y las hice publicas aqui en los foros, el problema con el TButton ya fue resuelto, pero ahora se me presenta un problema similar con el TCheckbox, sucede que cuando doy click o presiono barra espaciadora sobre el nuevo componente con "skin" para cambiar su estado de chequeo se pinta como es normalmente y luego se efectuan los cambios sobre el canvas del mismo para "skinearlo" a mi manera, esto provoca un efecto algo desagradable como si fuera un parpadeo, quisiera que alguien me ayude a solucionar esto porque hasta el momento no hallo solucion alguna, posteriormente muestro la implementación de lo que he hecho hasta ahora, ojalá me puedan ayudar:

Código Delphi [-]

type
  TXCheckBox = class (TCheckBox)
  private
  protected
    procedure CMDrawItem(var Message: TWMDrawItem); message WM_PAINT;
    procedure SetChecked(Value: Boolean); override;
    procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
    procedure Click; override;
    procedure Toggle; override;
    procedure CreateParams(var Param: TCreateParams); override;
  public
    constructor Create(aOwner: TComponent); override;
end;
 
implementation

  constructor TXCheckBox.Create(aOwner: TComponent);
  begin
    inherited;
  end;
  procedure TXCheckBox.CreateParams(var Param: TCreateParams);
  begin
    inherited;
    Param.Style := Param.Style or BS_OWNERDRAW;
  end;
    procedure TXCheckBox.Toggle;
    begin
      inherited;
      invalidate;
    end;
    procedure TXCheckBox.Click;
    begin
      inherited;
      invalidate;
    end;
    procedure TXCheckBox.CNCommand(var Message: TWMCommand);
    begin
      inherited;
      invalidate;
    end;

  procedure TXCheckBox.SetChecked(Value: Boolean);
  begin
    inherited;
    Invalidate;
  end;
  procedure TXCheckBox.CMDrawItem(var Message: TWMDrawItem);
  var
    DC: TCanvas;
    a: TPaintStruct;
  begin
    BeginPaint(Handle, a);
    DC := TCanvas.Create;
    DC.Handle := GetDc(Handle);
    DC.Brush.Style := bsSolid;
    DC.Brush.Color := clGray;
    DC.RoundRect(2,2,13,13, 3,3);
    DC.Brush.Style := bsClear;
    if Checked then
      DC.TextOut(5,0, 'x');
    EndPaint(Handle, a);
  end;
end.

bueno, a esto le falta un mundo aún, solo quiero solucionar el problema del parpadeo por el momento.


mil gracias de antemano colegas
saludos!!
aeff!!
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un TButton con un skin aeff Varios 9 12-11-2008 02:38:02
Activar un TComboBox con un TCheckBox nolo SQL 4 02-11-2008 02:39:23
Selección multiple con TCheckBox Nelly Varios 1 09-08-2007 00:28:06
Propiedad Checked de TCheckBox FunBit OOP 4 05-09-2005 10:53:06
TCheckbox no acepta el OnClick atirado OOP 2 30-09-2004 00:52:25


La franja horaria es GMT +2. Ahora son las 07:10:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi