Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ayuda con un componente (Leo u otro experto..)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ayuda con un componente (Leo u otro experto..) Responder citando

Pues aqui esta lo que pude hacer con el codigo que me paso leo ya funciona el editor de propiedades aunque creo que es muy poco optimo , pero como puedo llamar a la funcion para que me modifique la forma del boton en tiempo de diseño una vez escojido el nuevo boton, codigo
//CPP
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "BitmapRgn.cpp"
#include "USwingBtn.h"
//---------------------------------------------------------------------------

static inline TSwingBtn *ValidCtrCheck()
{
return new TSwingBtn(NULL);
}
//---------------------------------------------------------------------------
__fastcall TSwingBtn::TSwingBtn(TComponent* Owner)
: TButton(Owner)
{
_propsilueta = new TSiloute;
Parent=dynamic_cast<TWinControl*>(Owner);
_propsilueta->BMP="c:\\alianza.bmp";
SetRgn();
}
__fastcall TSwingBtn::~TSwingBtn()
{
delete _propsilueta;
}
//---------------------------------------------------------------------------
namespace Uswingbtn
{
void __fastcall Register()
{
TComponentClass classes[1] = {__classid(TSwingBtn)};
RegisterComponents("Swing Controls", classes, 0);


RegisterPropertyEditor(
__typeinfo(TSiloute),
__classid(TSwingBtn),
"Silueta",
__classid(TLoadBMP) );
}

}
//---------------------------------------------------------------------------
void __fastcall TSwingBtn::SetRgn(void){
hImagen = (HBITMAP) LoadImage(NULL, _propsilueta->BMP.c_str() , IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HRGN hRegion = BitmapRgn(hImagen, 0x0000FF00, 0x00FFFFFF);
SetWindowRgn(Handle,hRegion,true);
Application->MessageBox(_propsilueta->BMP.c_str() ,"",0);
}

//.H
//---------------------------------------------------------------------------
#ifndef USwingBtnH
#define USwingBtnH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#include <vcl\StdCtrls.hpp>
#include <DsgnIntf.hpp>
//---------------------------------------------------------------------------
class TSiloute : public TPersistent
{
private:
AnsiString _bmp;
public:
__fastcall TSiloute::TSiloute() {};
void __fastcall Assign(TPersistent *NwVal)
{
TSiloute *Prop = dynamic_cast<TSiloute*>( NwVal );
BMP= Prop->BMP;
}
__published:
__property AnsiString BMP = {read=_bmp,write=_bmp};
};
class TLoadBMP : public TClassProperty
{
public:

// En versiones anteriores a la 6 cambiamos
// _di_IFormDesigner por _di_IDesigner
__fastcall TLoadBMP() : TClassProperty() { }

virtual TPropertyAttributes __fastcall GetAttributes(void)
{
// Aqui es donde le decimos que muestre ese botoncito ...
return TPropertyAttributes() << paDialog;
}

virtual void __fastcall Edit(void)
{
// Aqui mostramos el form o la tarea que se tiene que ejecutar
// al pulsar ese botoncito
TSiloute *myProp = reinterpret_cast<TSiloute*>(GetOrdValue());

TOpenDialog *Od;
Od=new TOpenDialog(NULL);
Od->Execute();
myProp->BMP= Od->FileName;
}
};
class TSwingBtn : public TButton
{
private:
HBITMAP hImagen;
TSiloute *_propsilueta;
protected:
public:
void _fastcall SetBitmap(AnsiString Str);
__fastcall TSwingBtn(TComponent* Owner);
__fastcall ~TSwingBtn();
__published:
__property TSiloute *Silueta = {read=_propsilueta,
write=_propsilueta};
};
//---------------------------------------------------------------------------
#endif

Volver arriba
Mensaje    Asunto: Ayuda con un componente (Leo u otro experto..) Responder citando

Pues así sin probarlo, lo más sencillo seria cambiar la declaración de la propiedad "Silueta" del siguiente modo:

...
  __property TSiluete* Silueta ={read=_propsilueta, write=SetSilueta};
...

  // Implementamos la asignación de Silueta
  void __fastcall TSwingBtn::SetSilueta(TSiluete* valor)
  {
      if ( valor != _propsilueta)
      {
          _propsilueta->Assign( valor );
          // Despues de asignar la propiedad llamamos a las funciones
          //   necesarias para actualizar el estado del componente
          SetRgn();
      }
  }

de esta manera cada vez que se asigne la propiedad donde cargas la imagen puedes ejecutar la función SetRgn por ejemplo.

Espero que te sirva, al menos como idea, ya que lo estoy poniendo un poco a vista sin probarlo.

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.