• Viernes 8 de Noviembre de 2024, 20:14

Autor Tema:  Crear Imagenes (objetos) En Tiempo De Ejecucion  (Leído 3244 veces)

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Crear Imagenes (objetos) En Tiempo De Ejecucion
« en: Sábado 17 de Junio de 2006, 07:33 »
0
que tal amigos necesito realizar una simulacion y quisera implementar algo como esto crear un objeeto TImage en tiempo de ejecucion cada ves q1ue nesecite un muñeco ya lo hice usando una lista donde tengo definido una variable TImage *ima todo se detectabien pero al momento de poner lista->ima->picture->loadfromfile("c:archivimag"); me da un error y el programa se cierra. me dijeron pero no me supieron explicar como crear y destruir estos objetos entendiendo por esto que ya noseria de la forma en que lo pienso (es una interrogante ya q nose crear ni destruir ) trabajo con unos timer q controlanm los movimientos se que otra forma es tener n+1 imagenes cargadas en el programa y ir poniendolas visibles para moverlas pero no creo que sea muy eficas (apesar de que si no haverigua la otra forma la hago de esa : ))
gracias amigos de verdad si consigo algo sobre esto se los traigo para todos aprender :comp:

Max_D

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
    • http://sitioteca.spaces.live.com/
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #1 en: Sábado 17 de Junio de 2006, 18:07 »
0
Por lo que entendi, te da un error al cargar la imagen no? Puedes probar a poner:

Código: Text
  1. ima->Picture->Bitmap->FreeImage();
  2.  

antes de cargar una imagen y asi vacias el TImage y esta listo para poner otra con el LoadFromFile.

Tambien podria ser porque tendrias q ponerlo asi: "c:\\nombre_archivo.bmp" y no sin las dos \\.

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #2 en: Sábado 17 de Junio de 2006, 20:50 »
0
amigo gracias por responder pero no me funciona veras tengo una lista que guarda un puntero de tipo TImage veras




struct persona{//ESTRUCTURAS DE LOS TERMINOS
   TImage *imag;
   int a;
   persona *sig;
   };
typedef  persona *pter;


void insert(pter nuevo,pter person)//este es el insertar en la lista
{
pter aux;
if(person==NULL)
{

person=nuevo;
}
else{
 aux=person;
 while(aux->sig!=NULL)
 {
  aux=aux->sig;
 }
 aux->sig=nuevo;
}

}


void crear(pter nuevo)
{
 
 nuevo->sig=NULL;// aqui me da un error
 nuevo->imag->Picture->Bitmap->FreeImage();//saltando el error anterior aqui
 }                                                                    //tambien me da un error

la funcion crear e insertar la llamo al precionar un boto el codigo en ese boton es

void __fastcall TForm1::Button3Click(TObject *Sender)
{
pter person;
pter nuevo;
pter aux;
crear(nuevo);
insert(nuevo,person);
person->imag->Visible=true;
person->imag->Picture->Bitmap->LoadFromFile("e:\\muñeca2.bmp");

}
es que acaso es muy complicado trabajar de esta forma? ha varias personas le e preguntado y no saben responder
de todas formas gracias amigo

Vatoicc

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #3 en: Domingo 18 de Junio de 2006, 03:46 »
0
Lo que pasa es que en tu estructura, solo tienes declarado un puntero, pero solo eso... un puntero es una variable que guarda una direccion de memoria al objeto al que estas apuntando. Lo que te falta es crear el objeto, para despues poder manipularlo por medio de tu puntero.

Lo mejor seria que cambiaras tu estructura por una clase, para que en el constructor pongas en codigo para crear el objeto TImage


Código: Text
  1.  
  2. class persona
  3. {
  4. private:
  5.    TImage *imag;
  6.    int a;
  7.    persona *sig;
  8. public:
  9.    void persona(TObject *Parent);
  10.    void ~persona();
  11. };
  12.  
  13. void persona::persona(TObject *Sender)
  14. {
  15.    imag = new TImage( Parent ); //crear el objeto TImage
  16.    imag->parent = Parent;          //asignar de quien sera hijo
  17. }
  18.  
  19. void ~persona()
  20. {
  21.    imag->Free();          //liberar el objeto TImage de la memoria
  22. }
  23.  
  24.  


si no quieres cambiar tu codigo, y seguir usando una estructura, tendrias que crear manualmente el objeto TImage cada que declares una nueva estructura.

nota: este codigo no esta probrado solo escribi lo que se me ocurrio, ni siquiera recuerdo si el destructor se declara de esa manera, jeje, tengo mucho que no requiero de uno

espero haber entendido bien tu duda y que esto te sirva
La paranoia es una vision mas sutil de la vida

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #4 en: Domingo 18 de Junio de 2006, 06:08 »
0
pues provare de esa manera hber si me funciona. me dicen que lo mas dificil es eso crear y destruir objetos ya q la simulacion no es dificil solo el crear cada imagen y obviamente destruirla luego si algen save mas sobre simulciones les gradeceria la  yuda cuando la termine la pondre para el ue tenga mis dudas gracias amigos

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #5 en: Lunes 19 de Junio de 2006, 02:07 »
0
de esa fomar no pude pero veran encontre esto

cim++;
TImage *Image = new TImage (Application);//aqui creo el objeto
Image->Align=alNone;// pongo los atributos q quiero
Image->AutoSize=false;
Image->Center=false;
Image->Constraints->MaxHeight=0;
Image->Constraints->MaxWidth=0;
Image->Constraints->MinWidth=0;
Image->Constraints->MinHeight=0;
Image->Cursor=crDefault;
Image->DragCursor=crDrag;
Image->DragKind=crDrag;
Image->DragMode=dmManual;
Image->Enabled=true;
Image->Visible=true;
Image->Height=105;
Image->HelpContext=0;
Image->HelpKeyword="";
Image->HelpType=htContext;
Image->Hint="ui esta";
Image->IncrementalDisplay=false;
Image->Left=40;
Image->Name="imag"+IntToStr(cim);
Image->ParentShowHint=true;
Image->Picture->Bitmap->FreeImage();
Image->Picture->Bitmap->LoadFromFile("c:\\m.bmp");//cArgo la imagen
Image->Proportional=false;
Image->ShowHint=true;
Image->Stretch=false;
Image->Tag=0;
Image->Top=80;
Image->Transparent=true;
Image->Visible=true;
Image->Width=105;


PEro no se ve nada en el form eso lo puse dentro de un botton aldarle clic se creara un objeto TImage pero este no seve algen save como hcer?

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #6 en: Martes 20 de Junio de 2006, 03:36 »
0
lo ultimo que he hecho si me pueden ayudar por favor a solucionar el hecho que se borren las imagenes cargads

struct persona{//ESTRUCTURAS DE LOS TERMINOS
TImage *imag;// tipo TImage
int mesa_come;
persona *sig;
};
typedef persona *pter;
pter person;
pter nuevo;


//aqui cargo las imagenes y creo el objeto dando espacio de memoria

void imag(TImage *Image1)
{
pter aux;
aux=person;
i++;
//if(person->sig==NULL)
nuevo->imag=new TImage (Application);
nuevo->imag=Image1;
nuevo->imag->Picture->Bitmap->FreeImage();
nuevo->imag->Picture=NULL;
if(i==1)
{
nuevo->imag->Picture->LoadFromFile("e:\\Muñec1.bmp");
nuevo->imag->Visible=false;

}
else{
if(i==2)
{
nuevo->imag->Picture->LoadFromFile("e:\\Muñec2.bmp");
nuevo->imag->Left=50;
nuevo->imag->Top=80;
nuevo->imag->Visible=false;
}
else{
if(i==3)
{
nuevo->imag->Picture->LoadFromFile("e:\\Muñeca2.bmp");
nuevo->imag->Left=150;
nuevo->imag->Top=180;
nuevo->imag->Visible=false;

}
else{
nuevo->imag->Picture->LoadFromFile("e:\\Muñeca1.bmp");
nuevo->imag->Left=250;
nuevo->imag->Top=280;
nuevo->imag->Visible=false;

}
}
}

este codigo carga cada uno de los archivos .bmp y crea la lista pero cuando carga de un archivo al otro el archivo uno se borra es decir el carga y muestra muñec1 cuando carga muñec2 se borra muñec1 y apesar de que cuando trato de moverme en la lista no se muestran las imagenes

Vatoicc

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #7 en: Martes 20 de Junio de 2006, 23:42 »
0
Estas haciendo todo bien, creaste la imagen en memoria, y cambiaste sus propiedades bien, pero como lo puse en el codigo que te pase, no le asignaste de quien va a ser hijo, por eso no te aparece en la forma

Código: Text
  1.  
  2. void persona::persona(TObject *Sender)
  3. {
  4.   imag = new TImage( Parent ); //crear el objeto TImage
  5.   imag->parent = Parent;          //asignar de quien sera hijo
  6. }
  7.  
  8.  


Tu pusiste como Parent a Application, no lo he probado asi, pero puede funcionar,
lo que yo hago es asignarle la forma en la que quieres que aparesca
Código: Text
  1.  
  2.   imag = new TImage( Form1 ); //crear el objeto TImage
  3.   imag->parent = Form1;          //asignar de quien sera hijo
  4.  
  5.  

O si quieres que aparesca la imagen dentro de un GroupBox se lo indicas
Código: Text
  1.  
  2.   imag = new TImage( GroupBox1 ); //crear el objeto TImage
  3.   imag->parent = GroupBox1;          //asignar de quien sera hijo
  4.  
  5.  

Por que recuerda que los parametros Left y Top hacen referencia al Parent, por ejemplo, tu tienes Left 40 y Top 80, si eliges como Parent a Form1, la imangen se colocara a 40 y 80 pixeles de la ezquina superios izquierda de Form1 y si pones como Parent a GroupBox1 la imangen se colocara a 40 y 80 pixeles de la ezquina superios izquierda de GroupBox1
La paranoia es una vision mas sutil de la vida

BLADDE

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #8 en: Lunes 26 de Junio de 2006, 06:05 »
0
gracias amigo la verdad no lo pude conseguiir lo estoy haciendo de otra forma usando varias imgenes y cargandolas en distints imgenes ya puestas en el form y moviendolas con los timer. sino es molestia puedes poner un codigo ke haga ese trabajo porfavor creo ke amuchos nos ayudaria
gracias

geobeid

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Crear Imagenes (objetos) En Tiempo De Ejecucion
« Respuesta #9 en: Viernes 14 de Julio de 2006, 09:40 »
0
Seria mas facil hacerlo con Open GL  :D

De cualquier modo lo que veo es que tenes problemitas primero porque tenes una gran cantidad de Timages inutiles ya que por lo que entiendo solo queres que cambie lo que tiene el Timage dentro para que emule una animacion.

en ves de hacer una lista de Timages solo crearia uno. Evitaria poner ñ en los nombres de los bmp( depende la ver del builder puede traer problemas).

Como ya dijo Vatoicc ponele

Código: Text
  1. imag->parent = Parent;
  2.  
y solo encargate de hacer un LoadFromFile sin necesidad de borrar lo q habia previamente

si queres que sea un solo T image prova con esto
Código: Text
  1.  
  2.  
  3. ...
  4. Dibu *TImage;
  5. Dibu= new TImage(Form1);
  6. Dibu->Parent(Form1);
  7. Dibu->Visible=true;
  8. Dibu->AutoSize=true;
  9. Dibu->Transparent=true;
  10. Dibu->Picture->LoadFromFile("c:\\programa\\imagenes\\dibujito.bmp"); // (ACORDATE DE PONER '\\' Y NO '\' PORQUE SINO NO TE LA TOMA COMO UNA BARRA SINO COMO QUE ES PARTE DE UN CARACTER ESPECIAL)
  11. ...
  12.  
  13.  

Y cada ves que quieras cambiar la imagen desde tu timer le pones
Código: Text
  1.  
  2. Dibu->Picture->LoadFromFile("/* Path de la imagen que queres lodear*/");
  3.  
  4.  

SI TENES ALGUNA DUDA MANDAME UN MAIL Q ES MAS FACIL ( ENTRO MUY DE VES EN CUANDO  :whistling: )

suerte y segui gastandote las huellas digitales con el teclado que es la unica forma de encontrar errores
[size=109]
SI QUERES ENCONTRAR A JESÚS GOOGLEALO
[/size]