Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-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 TButton con un skin

saludos, quisiera que me ayudaran a crear un componente heredado del TButton y que se le pueda aplicar un skin, bueno, hasta el momento este skin consiste en rellenar la region del control con un color y pintar un simple rectángulo sobre esa region, para lo cual obtengo el HDC del objeto y se lo asigno al Handle de un objeto TCanvas dentro del nuevo componente, lo que ocurre es que cuando puslo el nuevo TButton ya no se repinta más, ¿por qué será?, ¿me pueden dar una ayuda con esto?

aqui les va el código que he implementado hasta el momento:

Código Delphi [-]
type
 TXButton = class (TButton)
    protected
      FLastWndProc: TWndMethod;
      procedure NewWndProc(var Message: TMessage);
    public
      Canvas: TCanvas;
      constructor Create(aOwner: TComponent); override;
      procedure Click; override;
  end;
 
(...)
 
  constructor TXButton.Create(aOwner: TComponent);
  begin
    Inherited;
    Canvas := TCanvas.Create;
    FLastWndProc := WindowProc;
    WindowProc := NewWndProc;
  end;
  procedure TXButton.Click;
  begin
    inherited;
  end;
  procedure TXButton.NewWndProc(var Message: TMessage);
  var
    DC: HDC;
    vPaintStruct: TPaintStruct;
    procedure Draw();
    begin
      Canvas.Handle := DC;
      Canvas.Brush.Color := RGB(25, 190, 240);
      Canvas.FillRect(Canvas.ClipRect);
      Canvas.Rectangle(5,5, 25 , 15);
    end;
  begin
    case  Message.Msg of
      WM_PAINT:
        begin
          DC := BeginPaint(Handle, vPaintStruct);
          Draw();
          EndPaint(Handle, vPaintStruct);
        end;
       WM_LBUTTONDOWN: begin DRaw(); FLastWndProc(Message); DRaw();end;
       WM_LBUTTONUP: begin DRaw();FLastWndProc(Message); DRaw();end;
       WM_MOUSEMOVE: begin DRaw(); FLastWndProc(Message);DRaw(); end;
       CM_MOUSELEAVE: begin DRaw(); FLastWndProc(Message); DRaw(); end;
       else     FLastWndProc(Message);
    end;
  end;

aqui está como yo creo el objeto en tiempo de ejecución, en el evento OnClick de un button:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  //
    aBtn :=TXButton.Create(Self);
    aBtn.Parent := self;
    aBtn.Left := 50;
    aBtn.Top:=50;
end;


muchas gracias de antemano, espero recivir ayuda !
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
El virus del TButton roman La Taberna 23 03-10-2008 18:10:23
duda TButton 11_8_88 C++ Builder 6 07-05-2008 21:07:01
componente tbutton ercrizeporta Varios 2 25-07-2007 12:26:46
crear un objeto tipo TButton didier OOP 3 26-05-2005 16:35:46
TButton Humberto Pertuz API de Windows 3 17-12-2003 19:04:13


La franja horaria es GMT +2. Ahora son las 16:41:54.


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