• Lunes 4 de Julio de 2022, 12:06

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - neg1414

Páginas: [1] 2
1
Diseño de Algoritmos / Descomponer sumatorio de un numero
« en: Jueves 20 de Mayo de 2010, 18:00 »
Buenas:

 Lo que intento es descomponer un numero en todos sus sumatorios pero siendo la primera cifra siempre la misma, es decir
por ejempol Numero 11,Primera cifra 6

 6-1-1-1-1-1
 6-1-1-1-1-2
 6-1-1-2-1
 6-1-1-3
 ......
.......
 6-2-1-1-1
 6-2-2-1
 6-2-3
 .....
 .....
6-5


He creado el siguiente algoritmo recursivo (en C)

Código: C++
  1. Principal()
  2.    {
  3.         Sumandos(11,1,6,"6 ");
  4.    }
  5.  
  6. Sumandos(int Nv,int i,int Sum,AnsiString s)
  7. {
  8.    if(Sum==Nv)
  9.     {
  10.       Mostrar(s);
  11.     }
  12.  
  13.    for (int a=Sum;a<Nv; a++)
  14.     {
  15.       Sumandos(Nv,i++,Sum+i,s+IntToStr(i)+" ");
  16.     }
  17. } 
  18.  

Pero el resultado solo es:

6 1 1 1 1 1
6 1 1 1 2
6 1 1 3
6 1 2 2
6 1 4
6 2 3
6 5

Me faltan combinaciones ejp  6-2-2-1

Alguna idea Gracias

2
C++ Builder / Re: Paso Vector por refernecia
« en: Sábado 25 de Abril de 2009, 17:39 »
Gracias por Contestar....

Al final lo He Hecho de la siguiente manera


Citar
Clase1
 {
    bool VectorPadre[3]
 
    ProcedEnClase2(VectorPadre);

 }


Código:
Citar
Clase2
 {
   
    //Declaro Variable Global

    bool*  VectorPuntero[3]
   ......................................

   ProcedEnClase2(bool Vect[])
     {
         *VectorPuntero = &Vect[0];
     }


Sea donde sea en la Clase2 si asigno datos a la matriz VectorPuntero
de la forma:
Código:

 
Citar
   (*VectorPuntero)[0]=true;


Estas Modificaciones se veran relflejadas en VectorPadre de la clase1

PosData: No creo que sea " hacer tantas Historias"

3
C++ Builder / Paso Vector por refernecia
« en: Sábado 25 de Abril de 2009, 13:37 »
Buenas..

  MI problema es el siguiente Tengo dos clases : clase1, Clase2

  En la primera clase creo un array booleano de 3 elementos

Citar

 Clase1
 {
 bool VectorOPadre[3];
 }

  Este vector lo paso como parametro a un procedimiento de la clase2
Citar
Clase2
 {
  ProcedEnClase2(VectorPadre);
 }
 
  En la clase 2  el procedimiento recibe el vectorPadre como parametro,lo modifica y al ser un paso por referencia esos cambios se plasman en VectorPadre una vez vuelvo a Clase1;

Citar
Clase2
 {
     ProcedEnClase2(bool Vect[]);
      {
         Vect[0]=true;
         Vect[1]=true;
         Vect[2]=true;
      }
}

Hasta aqui todo bien mi problema surge cuando, En la clase2 trabajo con el vector pasado desde clase1 en otros procediminetos,Obviamente me da un error por que la variable pasada es Local,solo puedo trabajar con ella en el procedimiento que la recibe como parametro..
Como solucion pense en crear una vector booleano variable Goblal
Citar
Clase2
{
   bool VectorGlobal[3]
}

Inicializarlo  apuntando este  a la direccion de comienzo del Vector pasado como referencia (VectorPadre) con lo cual al modificar el VectorGlobal estory modificando VectorPadre.He probado con

Citar
    ProcedEnClase2(bool Vect[]);
      {
         VectorGlobal=Vect;

         VectorGlobal=&Vect

         *VectorGlobal=&Vect
      }


No hay Manera Laguna Idea  Gracias

4
C++ Builder / Problema tamaño Form
« en: Sábado 29 de Noviembre de 2008, 12:22 »
Buenas, mi problema es el siguiente:

Desde un Form1 accedo a otro Form2 mediante la forma modal:

Código: Text
  1.  
  2. TForm2 * prueba;
  3.  
  4. prueba = new TForm2(this);
  5.  
  6. //Mostramos el Formulario como modal
  7. switch (prueba->ShowModal())
  8. {
  9. case mrOk:
  10. break;
  11. }
  12.  

En el evento Activate del Form2 (dependiendo de una condicion)este debe de redimensionarse (hacerse mas pequeño),

Código: Text
  1. Form2->Height =xxx
  2.  

pero no lo hace.

Supongo que tiene que ver con el acceso modal pero no consigo solucionarlo
Alguna Idea.


Gracias

5
C++ Builder / Interrumpir que se "refresque" componente
« en: Jueves 13 de Noviembre de 2008, 12:40 »
Mi Pregunta es si es posible evitar que un elemento  "refresque" su imagen (Supongo que sera evitar que se ejecute el evento ONPaint)
 Por ejemplo creo que al salir del evento KeyDown se repinta la Imagen del componente y me gustaria evitarlo.

Gracias.

6
C++ Builder / Retardo mostrar Form
« en: Martes 21 de Octubre de 2008, 15:53 »
Buenas:

  Tengo un programa que al iniciarse muestra en pantalla un menu (Form Principal),El caso es que en el evento Form Activate  el programa lee una gran cantidad de datos de un archivo, lo que le lleva un monton de tiempo.....Esto produce que del formulario menu se muestre en principio una parte (los bordes) y al rato (una vez leidos los datos del archivo) el resto del form (las opciones menu).

Es posible hacer que lea primero todos los datos y despues muestro el form completo .

Espero que me haya explicado Bien.

Gracias.

7
C++ Builder / Duda con con el evento MouseDown
« en: Domingo 5 de Octubre de 2008, 09:53 »
Buenas (Haber si me explico)

 He creado un componente Timagen.
 En este componente se cargaran tres imagenes.

  1. La imagen predeterminada.

  2. Se cargara esta imagen cuando se pulse el boton Izquierdo del boton y se mostrara mientras siga pulsado el boton    
      izquierdo del raton

 
  3. Se cargar esta imagen cuando se deje de pulsar le boton Izquierdo del Raton

 
 Lo intente con el evento  MouseDown pero al pulsar el boton izquierdo del raton me carga directamente la 3 imagen aunque mantenga el boton del raton pusado.

Alguna Idea Gracias.

8
C++ Builder / Problemas al mostrar texto
« en: Miércoles 23 de Julio de 2008, 09:08 »
Estoy mostrando texto usando el objeto TCanvas de la forma:

Canvas->TextOut(x,y,"Text").

El texto me lo muestra,el problema radica en que el texto mostrado contiene un fondo Blanco....Cada letra esta rodeada de un contorno cuadrado blanco.
(Las letras no tienen fondo transparente)
Como puedo solucionarlo....

Gracias.

PosdTdata: el tipo letra que uso es Arial..

9
C++ Builder / Tamaño Tedit
« en: Miércoles 18 de Junio de 2008, 18:05 »
En  fase e diseño eh colocado varios tedit con un tamaño bastante pequeño
(13x14).Una vez colocados todos Guardo y salgo.
Cuando viuelvo a carga el programa, el tamaño de los TEdits me ha cambiado son mas grandes
Alguna Idea.......

Gracias

Nota: Si copio un Tedit con el tamaño pequeño y lo pego en el form el nuevo se muestra con un tamaño mayor (justamente el tamaño en el que me aparecen todos al cargar de nuevo el programa)

10
C++ Builder / Re: Problemas Con Listbox
« en: Viernes 30 de Mayo de 2008, 18:35 »
En primer lugar gracias por atenderme.

He corregido el codigo....

Código:

void __fastcall TForm1::FormActivate(TObject *Sender)
{

TStringList  *Lista  = new TStringList;

    Lista->Add("A");
    Lista->Add("AB");
    Lista->Add("AC");
    Lista->Add("B");
    Lista->Add("BA");
    Lista->Add("C");

    Lista->Sorted=true;


    for (int i=0;i<Lista->Count;i++)
      {
          ListBox1 ->Items->Text = Lista->Text;
      }

}

Lo he pegado,Te juro que sigue Haciendo lo mismo:

Pulso la tecla A: salta a AB

Pulso la tecla B: salta a BA (quiero que salte a B)

Pulso la tecla c : Salta a C

Pulso la tecla a : Salta a AB (quiero que salte a A)

Alguna idea:

Gracias otra vez

11
C++ Builder / Problemas Con Listbox
« en: Jueves 29 de Mayo de 2008, 19:08 »
Buenas:

Dentro de un Listbox cuyos elementos estan ordenados alfabeticamente al pulsar una tecla alfanumerica el item que me selecciona es siempre el segundo del grupo de items que empiezen por la tecla pulsada..nunca el primero (a mi os aseguro que me pasa) .

Alguien sabe porque y como puedo hacer que la posicion sea el primeros del grupo de items que empiezen por la tecla pulsada.


Código: Text
  1.  
  2.  
  3. TStringList  *Lista  = New TStringList
  4.  
  5.      Lista-&#62;Add(&#34;A&#34;)
  6.      Lista-&#62;Add(&#34;AB&#34;)  
  7.      Lista-&#62;Add(&#34;AC&#34;)
  8.      Lista-&#62;Add(&#34;B&#34;)
  9.      Lista-&#62;Add(&#34;BA&#34;)
  10.      Lista-&#62;Add(&#34;C&#34;)
  11.      ...
  12.  
  13.      Lista-&#62;Sorted;
  14.  
  15.  
  16.      for (int i=0;i&#60;Lista&#62;Count;i++)
  17.        {
  18.            ListBox1 -&#62;Items-&#62;Text = Lista-&#62;Text
  19.        }
  20.  
  21.  


Gracias.

12
C++ Builder / Re: Algoritmo Calcular Combinaciones
« en: Viernes 7 de Marzo de 2008, 17:19 »
Tienes toda la razon

  Gracias

13
C++ Builder / Algoritmo Calcular Combinaciones
« en: Jueves 6 de Marzo de 2008, 20:33 »
Buenas, Haber si me explico:

 
Tengo una serie de datos que he guardado de la forma siguiente

Código: Text
  1.  
  2.  
  3.   struct Datos{
  4.      short Dato1;
  5.      short Dato2;
  6.      short Dato3;
  7.      short Dato4;
  8.   }
  9.  
  10.   Datos Coleccion[5];
  11.  
  12. ]
  13.  

 con ella debo de calcular todas la combianciones posibles entre sus datos
de la forma


Código: Text
  1.  
  2.  
  3.   short Combinaciones[NumCombinaciones][5]  //Subgeneris
  4.  
  5.  
  6.   Combinaciones[0].[0] =  Coleccion[0].Dato1;
  7.   Combinaciones[0].[1] =  Coleccion[1].Dato1;
  8.   Combinaciones[0].[2] =  Coleccion[2].Dato1;
  9.   Combinaciones[0].[3] =  Coleccion[3].Dato1;
  10.   Combinaciones[0].[4] =  Coleccion[4].Dato1;
  11.  
  12.   Combinaciones[1].[0] =  Coleccion[0].Dato1;
  13.   Combinaciones[1].[1] =  Coleccion[1].Dato1;
  14.   Combinaciones[1].[2] =  Coleccion[2].Dato1;
  15.   Combinaciones[1].[3] =  Coleccion[3].Dato1;
  16.   Combinaciones[1].[4] =  Coleccion[4].[b]Dato2;[/b]
  17.                  
  18.  
  19.   Combinaciones[2].[0] =  Coleccion[0].Dato1;
  20.   Combinaciones[2].[1] =  Coleccion[1].Dato1;
  21.   Combinaciones[2].[2] =  Coleccion[2].Dato1;
  22.   Combinaciones[2].[3] =  Coleccion[3].Dato1;
  23.   Combinaciones[2].[4] =  Coleccion[4].[b]Dato3;[/b]
  24.                  
  25.  
  26.   Asi Sucesivamente hasta completar todas las  Combinaciones
  27.  
  28.  
  29.   Combinaciones[1024].[0] =  Coleccion[0].[b]Dato4;[/b]
  30.   Combinaciones[1024].[1] =  Coleccion[1].[b]Dato4;[/b]
  31.   Combinaciones[1024].[2] =  Coleccion[2].[b]Dato4;[/b]
  32.   Combinaciones[1024].[3] =  Coleccion[3].[b]Dato4;[/b]
  33.   Combinaciones[1024].[4] =  Coleccion[4].[b]Dato4;[/b]
  34.  
  35.  
  36.  
  37.  



Para realizar estas operaciones solo se me ocurre mediante bucles Anidados (uno por cada coleccion en total 5) pero surge aqui un problema:

 No se APRIORI  cuantas colecciones tendran datos por lo cual  puede que no necesitare los 5 bucles anidados: Si solo hay tres colecciones la dimension Combinaciones es: Combinaciones[64][5] y solo necesitare 3 bucles.
 

Hay algun algoritmo que solucione este problema

Gracias espero haberme explicado bien.

14
C++ Builder / Re: Problemas Con Parametro Funcion
« en: Sábado 15 de Diciembre de 2007, 14:26 »
He encontardo el problema (Gracias Leo)

 

 La declaracion correcta al ser un tipo definido es

  MiTabla::TTabla* MiTabla::LeerTabla()
  {
  }

 nota El valor retornara de la forma :

    return &("Variable del tipo TTabla");

 Y ya que estamos me ha surgido otro problema:

 Quier usar el tipo definido en esa clase (MITabla) en otras clases sin tener que volver a definirlo

 ¿Se puede?

Gracias

15
C++ Builder / Problemas Con Parametro Funcion
« en: Jueves 13 de Diciembre de 2007, 16:00 »
Buenas

Dentro de una Calse dreado un tipo que viene a ser una Tabla de enteros  de la forma

class MiTabla;

private:

typedef  int TTabla[14][14];

He  creado una funcion que me devolvera  un dato de este tipo

public:

TTabla  *LeerTabla()

Hata Aqui todo bien.....

El problema surge a la hora de implementar la funcion

TTabla *MiTabla::LeerTabla()
{
}

Me da error "Declaration syntax error"

He probado con
TTabla  **LeerTabla()
TTabla **MiTabla::LeerTabla()
idem

Alguna Idea

Gracias

16
C++ Builder / Re: Cambiar Propiedad De Varios Componentes
« en: Jueves 6 de Diciembre de 2007, 19:56 »
Hola denuevo

Añado esto para que se entienda mejor

Supongamos que al pulsar un boton accedemos a un metodo donde cambiamos una propiedad del los componentes accediendo a un metodo
que possen

void __fastcall TForm1::Button1Click(TObject *Sender)
{

ModificarPropiedades();
}


void ModificarPropiedades()
{

TComponent1->Modificar();
TComponent2->Modificar();
TComponent3->Modificar();
........................ .....
TComponent40->Modificar();
}

17
C++ Builder / Re: Cambiar Propiedad De Varios Componentes
« en: Jueves 6 de Diciembre de 2007, 19:44 »
son todos el mismo componente vcl creado por mi (40 iguales)

18
C++ Builder / Re: Cambiar Propiedad De Varios Componentes
« en: Jueves 6 de Diciembre de 2007, 14:44 »
En primer lugar gracias por contestarme.

 He probado tu solucion pero me ha surgido un problema:

 El componente (Componentes: TComponent1, Tcomponent2...) lo he creado yo y el metodo al que llaman el grupo de componentes no es  reconocido cuando  realizo  la llamada,  de la misma forma que si reconoze el metodo clear() del TEdit del ejemplo.


  ((TComponentePropio*)Components)->MetodoPropio();  NO FUNCIONA


Espero Habeme explicado bien

Gracias Otra VEz

19
C++ Builder / Cambiar Propiedad De Varios Componentes
« en: Miércoles 5 de Diciembre de 2007, 15:43 »
Buenas

  El caso es que tengo varios Componentes del mismo tipo a los que he denominado de la forma:

  TComponent1
  TComponent2
  TComponent3
  .......
  TComponent40

  Segun la eleccion del usuario se ejecuta un metodo "CambiarCaption" en la que  se llama a un procedimiento propio del Componente  (la mima llamada para cada componente)


  CambiarCaption()
  {
  TComponent1->Procedimiento();
  TComponent2->Procedimiento();
  TComponent3->Procedimiento();
     .............................
  TComponent40->Procedimiento();

   }
 
  Mi pregunta es la siguiente: Al ser el procedimiento a ejecutar igual para todos los
Componentes seria posible Evitar la tediosa operacion de ir enumerando uno a uno todos los componentes con su respectiva llamada y hacerlo de una manera mas comoda


Gracias

20
C++ Builder / Crear Nuevo Componente Vcl Visual
« en: Miércoles 24 de Octubre de 2007, 17:14 »
Buenas :

  Estoy intentando crear mi primer componente VCL (VISUAL) lo derivo de la clase customControl (sera interactivo con el usuario)
  El caso es que lo "creo" logrando que me aparezca en la paleta Standard el icono correspondiente. se supone que al anadirlo en un form en principio deberia de aparecer un rectangulo (de 100x150) con borde "ES SOLO UNA PRUEBA " pero na de na.

os dejo el codigo del componente haber si me podeis ayudar

#ifndef ComponenteH
#define ComponenteH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>


//---------------------------------------------------------------------------
class PACKAGE TComponente : public TCustomControl
{

private:

 TCanvas *FCanvas; //Para Dibujar

 //Mensaje de Windows solicitando el Tamano del control
 void __fastcall CNMeasureItem(TWMMeasureItem& Mensaje);

 //Mensaje de Windows solicitando el tamano del control
 void __fastcall CNDrawItem(TWMDrawItem& Mensaje);

 BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(CN_MEASUREITEM,TWMMeasureItem,CNMeasureItem);
   MESSAGE_HANDLER(CN_DRAWITEM,TWMDrawItem,CNDrawItem);
 END_MESSAGE_MAP(TCustomControl);

protected:

 //Parametros para la creacion del Compnente
 void __fastcall Parametros (TCreateParams &Parametro);

 //Cambio el estado del Componente
 void __fastcall EstadComponent (bool ADefault);

 public:
        __fastcall TCeldaResultados(TComponent* Owner);


__published:

};
//---------------------------------------------------------------------------





#include <vcl.h>

#pragma hdrstop

#include "Componente.h"
#pragma package(smart_init)

static inline void ValidCtrCheck(TComponente *)
{
        new TCeldaResultados(NULL);
}



//---------------------------------------------------------------------------
__fastcall TComponente ::TComponente (TComponent* Owner)
        : TCustomControl(Owner)
{
    FCanvas = new TCanvas; //Creamos el objeto camvas
}



//---------------------------------------------------------------------------
//Fijamos una serie de parametros antes de crear el componente

void __fastcall TComponente ::Parametros (TCreateParams &Parametro)
{
  Parametro.Width  =100;
  Parametro.Height =150;
  //Indicamos que el control va a ser definido por el rogramador
  Parametro.Style = Parametro.Style | BS_OWNERDRAW;
}


//---------------------------------------------------------------------------
//Cada vez que Windows necesita dibujar el componente
//BS_OWNERDRAW envia este mensaje,solicitando las dimensiones

void __fastcall TComponente ::CNMeasureItem(TWMMeasureItem& Mensaje)
{
  //Facilitamos la anchura y altura del control
  Mensaje.MeasureItemStruct->itemWidth  = Width;
  Mensaje.MeasureItemStruct->itemHeight = Height;
}


//---------------------------------------------------------------------------
//Cada vez que halla que dibujar el control se llamara a este metodo

 void __fastcall TComponente ::CNDrawItem(TWMDrawItem& Mensaje)
{

   RECT Area;
   char Texto[256];
   strncpy(Texto,Caption.c_str(),255); //Copiamos el titulo del boton
   Area = ClientRect; //Obtenemos el area de Trabajo

   // Tomar el color normal del borde
   FCanvas->Pen->Color = clWindowFrame;

   //El Handle de FCanvas sera el que nos permita dibujar
   FCanvas->Handle = Mensaje.DrawItemStruct->hDC;

   //Anchura del Lapiz
   FCanvas->Pen->Width =2;

   //Estilo lapiz continuo
   FCanvas->Pen->Style = psSolid;

   //Relleno solido
   FCanvas->Brush->Style = bsSolid;

   //color
   FCanvas->Brush->Color=clBtnFace;

   //Dibujamos un contorno
   FCanvas->Rectangle(10,10,20,20);

   //Cuando Hallamos terminado Handle debe de ser cero
   FCanvas->Handle = 0;
}



//---------------------------------------------------------------------------
//Al cambiar el estado del componente

void __fastcall TComponente ::EstadComponent (bool ADefault);
{
  Refresh(); //Redibujar
}

//---------------------------------------------------------------------------
namespace Componente
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TCeldaResultados)};
                 RegisterComponents("Standard", classes, 0);
        }
}


Gracias

21
C++ Builder / Duda Componente Updown
« en: Lunes 17 de Septiembre de 2007, 11:51 »
Como puedo saber  si en un componente UpDown se ha pulsado la flecha arriba o la flecha abajo

Gracias

22
C++ Builder / Tstringlist : Modificar Un Item En Particular
« en: Sábado 25 de Agosto de 2007, 19:06 »
Buenas

 Como puedo modificar por elemplo el tercer item de un TstringList (modificar su texto)

Gracias

23
C++ Builder / Re: Puedo Cambiar La Imagen De Un Componente Vcl ??
« en: Viernes 17 de Agosto de 2007, 16:20 »
El siguiente codigo han de agradecerselo a Cesar C. Salazar Gonzalez (Al Cesar lo que es del Cesar)

Esta es una forma de hacer un boton redondo....
saludos...

ARCHIVO BOTON.CPP
Código:

//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include "RoundButton.h"
//---------------------------------------------------------------------------
static inline TRoundButton *ValidCtrCheck()
{
   return new TRoundButton(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRoundButton::TRoundButton(TComponent* Owner)
   : TButton(Owner)
{
  FCanvas = new TCanvas; // creamos el objeto Canvas
}

__fastcall TRoundButton::~TRoundButton()
{
     delete FCanvas; // Liberamos el Canvas
}

   // Antes de crear el control se fijan una serie de parámetros,
   // entre los cuales está el estilo del botón
void __fastcall TRoundButton::CreateParams(TCreateParams &Params)
{
  TButton::CreateParams(Params); // La clase ascendiente se ocupará de establecer los parámetros generales
  Params.Style = Params.Style | BS_OWNERDRAW; // Nosotros indicamos que el control va a ser no estándar
}

   // Cada vez que Windows necesita dibujar un botón con el estilo
   // BS_OWNERDRAW envía este mensaje, solicitando las dimensiones
void __fastcall TRoundButton::CNMeasureItem(TWMMeasureItem& Mensaje)
{
    // Facilitamos la anchura y altura del control
  Mensaje.MeasureItemStruct->itemWidth = Width;
  Mensaje.MeasureItemStruct->itemHeight = Height;
}

    // Cada vez que haya que dibujar el control se llamará a este método
void __fastcall TRoundButton::CNDrawItem(TWMDrawItem& Mensaje)
{
   RECT Area;
   char Texto[256];

   strncpy(Texto, Caption.c_str(), 255); // Copiamos el título del botón
   Area = ClientRect; // y obtenemos el área que tenemos de trabajo

   // En el parámetro Mensaje existe una estructura DrawItemStruct, en
   // cuyo interior encontraremos el campo ItemState, que nos permitirá
   // conocer el estado del botón
  if (Mensaje.DrawItemStruct->itemState & ODS_SELECTED) // El botón está pulsado
     FCanvas->Pen->Color = clBtnHighlight; // Tomar el color destacado primero
  else FCanvas->Pen->Color = clWindowFrame; // en caso contrario tomar el color normal de borde

     // El Handle de FCanvas será el Hdc enviado en Mensaje.DrawItemStruct,
     // lo que nos permitirá dibujar en la superficie del botón
  FCanvas->Handle = Mensaje.DrawItemStruct->hDC;

  FCanvas->Pen->Width = 1;  // Anchura del lapiz
  FCanvas->Pen->Style = psSolid; // estilo continuo
  FCanvas->Brush->Style = bsSolid; // Relleno sólido
  FCanvas->Brush->Color = clBtnFace; // con el color de los botones

        // Dibujamos un contorno
  FCanvas->RoundRect(Area.left, Area.top, Area.right, Area.bottom,
        (Area.right-Area.left) * 2, (Area.bottom-Area.top) * 2);

        // Intercambiar el color del lápiz
  FCanvas->Pen->Color = FCanvas->Pen->Color == clWindowFrame ?
        clBtnHighlight : clWindowFrame;

        // Y dibujar la sombra interior
  FCanvas->RoundRect(Area.left, Area.top, Area.right-1, Area.bottom-1,
        (Area.right-Area.left) * 2 -2, (Area.bottom-Area.top) * 2 -2);

  if (Mensaje.DrawItemStruct->itemState & ODS_FOCUS) { // Si el botón es el control actual
   InflateRect(&Area, -4, -4); // En el interior del área

    FCanvas->Pen->Color = // Y según que esté pulsado o no
        Mensaje.DrawItemStruct->itemState & ODS_SELECTED ?
                clBtnShadow : clWindowFrame;

     FCanvas->Pen->Style = psDot;           // Dibujaremos una línea punteada
     FCanvas->Brush->Style = bsClear;       // sin rellenar

               // también con forma de elipse
     FCanvas->RoundRect(Area.left, Area.top, Area.right, Area.bottom,
        (Area.right-Area.left)*2, (Area.bottom-Area.top)*2);

     InflateRect(&Area, 4, 4); // Devolvemos a área su valor original
  }
         // Si el botón está pulsado
  if (Mensaje.DrawItemStruct->itemState & ODS_SELECTED)
     OffsetRect(&Area, 1, 1); // Desplazar un punto el área

  InflateRect(&Area, -5, -5); // Reducirla
  FCanvas->Font = Font; // tomar el tipo de letra seleccionado en el botón
      // Si el botón está desactivado y no éstá en modo de diseño
  if (! Enabled && ! ComponentState.Contains(csDesigning))
     FCanvas->Font->Color = clBtnShadow; // utilizar el color difuminado

          // y escribir el título
  DrawText(FCanvas->Handle, Texto, strlen(Texto),
           &Area, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

  FCanvas->Handle = 0; // Cuando hayamos terminado Handle debe ser cero
}

    // Al cambiar el estado del botón
void __fastcall TRoundButton::SetButtonStyle(bool ADefault)
{
   Refresh(); // simplemente redibujar
}


//---------------------------------------------------------------------------
namespace Roundbutton
{
   void __fastcall Register()
   {
      TComponentClass classes[1] = {__classid(TRoundButton)};
      RegisterComponents("Programacion C++ Builder", classes, 0);
   }
}
//---------------------------------------------------------------------------


ARCHIVO BOTON.H
Código:

//---------------------------------------------------------------------------
#ifndef RoundButtonH
#define RoundButtonH
//---------------------------------------------------------------------------
#include <vcl\SysUtils.hpp>
#include <vcl\Controls.hpp>
#include <vcl\Classes.hpp>
#include <vcl\Forms.hpp>
#include <vcl\StdCtrls.hpp>
//---------------------------------------------------------------------------
class TRoundButton : public TButton
{
private:
    TCanvas * FCanvas; // Para dibujar
      // Mensaje de Windows solicitando el tamaño del control
    void __fastcall CNMeasureItem(TWMMeasureItem& Mensaje);
      // Mensaje de Windows solicitando que el control sea dibujado
    void __fastcall CNDrawItem(TWMDrawItem& Mensaje);
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(CN_MEASUREITEM, TWMMeasureItem, CNMeasureItem);
     MESSAGE_HANDLER(CN_DRAWITEM, TWMDrawItem, CNDrawItem);
   END_MESSAGE_MAP(TButton);
protected:
      // Parámetros para la creación del control
    void __fastcall CreateParams(TCreateParams &Params);
      // Cambio del estado del botón
    void __fastcall SetButtonStyle(bool ADefault);
public:
   __fastcall TRoundButton(TComponent* Owner);
      // Redefinimos también el el destructor
    __fastcall ~TRoundButton();
__published:
};
//---------------------------------------------------------------------------
#endif

24
C++ Builder / Alinear El Texto De Un Tedit A La Derecha
« en: Martes 14 de Agosto de 2007, 18:13 »
Buenas:

   Como se puede alinear el Texto de un Edit a la derecha en tiempo de Ejecucion

   Gracias

25
C++ Builder / Puedo Cambiar La Imagen De Un Componente Vcl ??
« en: Viernes 10 de Agosto de 2007, 18:14 »
Buenas :
   
 Al  crear un nuevo Componenente VCL tomando como base otro ya existente se puede modificar tanto sus propiedades como eventos, mi pregunta es si ademas se puede cambiar su aspecto visual.
Por ejemplo el tipico cuadrado de un CheckBox convertirlo en un circulo......

Si es posible me gustaria saber como


Gracias

Páginas: [1] 2