• Sábado 9 de Noviembre de 2024, 03:29

Autor Tema:  Realizar Componentes  (Leído 1216 veces)

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Realizar Componentes
« en: Jueves 3 de Septiembre de 2009, 20:34 »
0
Buenas a todos...

Bueno mi pregunta es la siguiente..

ultimamente me ha entrado la inquietud de como realizar un componente les cuento porque..

en estos momentos en la red me cosegui un codigo que reestablece el tamaño de los componentes dependiendo
el tamaño del form... muy bueno diria yop...
le meti un par de cositas para que tambien redimensionara los TDBGrid con todo y columnas y lo puse en un
header para llamarlo en cualquier lugar de mi proyecto.....
bueno eso funciona muy bien pero me gustaria que solo con cojer un objeto y arrastrarlo al form lo hiciera y ya...

no se me inquieta eso..ajj y la verdad no se por donde empezar... si alguno de ustedes sabe donde puedo sacar informacion
con respecto al tema les estare muy agradecido......

hay esta el codigo del header

Código: C++
  1.  
  2. #include <IniFiles.hpp>
  3. #include <DBGrids.hpp>
  4. #include<memory>
  5.  
  6.  
  7. //RegistrarControles(This); en el constructor de la forma
  8. //---------------------------------------------------------------------------
  9. void __fastcall RegistrarControles(TWinControl *F)
  10. {
  11.    AnsiString asResize=ExtractFilePath(Application->ExeName)+F->Name.Trim()+".ini";
  12.    std::auto_ptr<TIniFile> pIni(new TIniFile(asResize));
  13.    TControl *pControl;
  14.    TDBGrid *pGrid;
  15.    TStatusBar *pBar;
  16.    float ccLeft,ccHeight,ccTop,ccWidth,cgWith,csWith;
  17.    AnsiString Tclase;
  18.    for(int control = 0; control <F->ComponentCount; control++)
  19.    {
  20.       Application->ProcessMessages();
  21.       if (F->Components[control]->InheritsFrom(__classid(TControl)))
  22.       {
  23.          Application->ProcessMessages();
  24.          pControl = dynamic_cast<TControl*>(F->Components[control]);
  25.          Tclase = AnsiString(pControl->ClassName().operator AnsiString());
  26.          // sacamos los porcentajes
  27.          ccTop    = ( pControl->Top    * 100 ) / F->Height;
  28.          ccLeft   = ( pControl->Left   * 100 ) / F->Width;
  29.          ccHeight = ( pControl->Height * 100 ) / F->Height;
  30.          ccWidth  = ( pControl->Width  * 100 ) / F->Width;
  31.          // grabamos en Archivo de Configuracion
  32.          pIni->WriteFloat(pControl->Name,"Top",ccTop) ;
  33.          pIni->WriteFloat(pControl->Name,"Left",ccLeft) ;
  34.          pIni->WriteFloat(pControl->Name,"Width",ccWidth) ;
  35.          pIni->WriteFloat(pControl->Name,"Height",ccHeight) ;
  36.          if(Tclase == "TDBGrid")
  37.          {
  38.           pGrid = dynamic_cast<TDBGrid*>(F->Components[control]);
  39.           for(int col=0;col<pGrid->Columns->Count;col++)
  40.           {
  41.            cgWith = (pGrid->Columns->Items[col]->Width * 100) / pGrid->Width;
  42.            pIni->WriteFloat(pControl->Name,"col"+AnsiString(col),cgWith);
  43.           }
  44.          }
  45.       }
  46.    }
  47.    pIni->UpdateFile();
  48. }
  49. //---------------------------------------------------------------------------
  50. //AcomodarControles(This); en el evento OnResize de la forma
  51. void __fastcall AcomodarControles(TWinControl *F)
  52. {
  53.    AnsiString asResize=ExtractFilePath(Application->ExeName)+F->Name.Trim()+".ini";
  54.    std::auto_ptr<TIniFile> pIni(new TIniFile(asResize));
  55.    TControl *pControl;
  56.    TDBGrid *pGrid;
  57.    float ccLeft,ccHeight,ccTop,ccWidth;
  58.    float gWidthCol;
  59.    for(int control = 0; control <F->ComponentCount; control++)
  60.    {
  61.       if (F->Components[control]->InheritsFrom(__classid(TControl)))
  62.       {
  63.          Application->ProcessMessages();
  64.  
  65.          pControl = reinterpret_cast<TControl*>(F->Components[control]);
  66.          // recuperamos los porcenajes en relacion al form
  67.          ccTop   = pIni->ReadFloat(pControl->Name,"Top",ccTop);
  68.          ccLeft  = pIni->ReadFloat(pControl->Name,"Left",ccLeft) ;
  69.          ccWidth = pIni->ReadFloat(pControl->Name,"Width",ccWidth) ;
  70.          ccHeight= pIni->ReadFloat(pControl->Name,"Height",ccHeight) ;
  71.             pControl->Left   = (ccLeft  *  F->Width) / 100 ;
  72.             pControl->Top    = (ccTop   *  F->Height) / 100 ;
  73.             pControl->ClientWidth  = (ccWidth *  F->Width) / 100 ;
  74.             pControl->ClientHeight = (ccHeight * F->Height) / 100 ;
  75.          if(pControl->ClassName().operator AnsiString()=="TDBGrid")// Esto lo hice yo
  76.          {
  77.           pGrid = reinterpret_cast<TDBGrid*>(F->Components[control]);
  78.           for(int col=0;col<pGrid->Columns->Count;col++)
  79.           {
  80.            gWidthCol = pIni->ReadFloat(pControl->Name,"col"+AnsiString(col),gWidthCol);
  81.            pGrid->Columns->Items[col]->Width=(gWidthCol*pGrid->Width)/100;
  82.           }
  83.          }
  84.        }
  85.    }
  86. }
  87.  
  88.  
  89.  

RegistrarControles(This); esto se pondria en el constructor de la forma
AcomodarControles(This); esto en el OnResize y ya eso es todo....

Cualquier comentario sera bn recibido...... y espero que les guste el codiguillo  :P
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]