Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2007
Avatar de Bicholoco
Bicholoco Bicholoco is offline
Miembro
 
Registrado: mar 2007
Posts: 21
Poder: 0
Bicholoco Va por buen camino
Cargar Imagen desde un Form secundario

Buenas:

He creado un Form (Form1) con un TImage. Para modificar la imagen que contiene empleo sin ningún problema:
Código Delphi [-]
{Form1.Image1.Canvas.LoadFromFile('nombredearchivo'); 
Eso es lo que puse antes y estaba mal
Quería decir esto:}
Form1.Image1.Picture.LoadFromFile('nombredearchivo');

Por ahora funciona sin problemas.

Desde este Form1 ejecuto también el siguiente código para abrir una nueva ventana (Form2):
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); var Ficha2: TForm2;  
begin //Creación de una ficha para introducir los datos  
Ficha2 := TForm2.Create(Self);  
With Ficha2 do  
     begin 
     Caption:= 'Esto es el form2';  
     showModal();  
     end;  
end;

hasta aquí, también sin problemas. Se me abre una nueva ventana que es Form2.

Mi problema es el siguiente. En el Form2 (la nueva ventana) tengo otra imagen que deseo cambiar en un momento dado. El codigo se ejecuta en el mismo Form2 y afecta a la imagen de dicho Form2. Pero he probado este código que es:
Código Delphi [-]
Form2.Image2.Picture.LoadFromFile('OtroNombreDeArchivo');
Pero me da este error:

Access Violation at adress 0045859A in module 'Project1.exe'. Read of address 00000334

¿Alguna idea?

Última edición por Bicholoco fecha: 02-04-2007 a las 16:44:51. Razón: Corrigiendo el codigo
Responder Con Cita
  #2  
Antiguo 02-04-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba con:

Código Delphi [-]
Form2.Image2.LoadFromFile('OtroNombreDeArchivo');
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 02-04-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); var Ficha2: TForm2; 
Esa linea no la tengo claro.

Los procedures no devuelven nada...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #4  
Antiguo 02-04-2007
Avatar de Bicholoco
Bicholoco Bicholoco is offline
Miembro
 
Registrado: mar 2007
Posts: 21
Poder: 0
Bicholoco Va por buen camino
Cita:
Empezado por ArdiIIa
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject); var Ficha2: TForm2; 

Esa linea no la tengo claro.

Los procedures no devuelven nada...
Lo que queria representar con eso es que en el Form1 hay un botón. Al pulsar dicho boton se abre el Form 2 (son las 7 lineas siguientes)

Última edición por Bicholoco fecha: 02-04-2007 a las 16:39:23.
Responder Con Cita
  #5  
Antiguo 02-04-2007
Avatar de Bicholoco
Bicholoco Bicholoco is offline
Miembro
 
Registrado: mar 2007
Posts: 21
Poder: 0
Bicholoco Va por buen camino
Creo que nos hemos liado todos simultaneamente.

Yo escribí
Form1.Image1.Canvas.LoadFromFile('nombredearchivo');
cuando debería ser
Form1.Image1.Picture.LoadFromFile('nombredearchivo');

Bueno, eso ya lo he corregido en mi primer mensaje.

Neftali me ha aconsejado usar
Form2.Image2.LoadFromFile('OtroNombreDeArchivo');
Cosa que no funciona. Da error de sintaxis. Supongo que él me quería decir también:
Form2.Image2.Picture.LoadFromFile('nombredearchivo');

El caso es que ninguna de las opciones me funciona por ahora.

Gracias a todos por el intento de solución, pero el reto sigue abierto.

Última edición por Bicholoco fecha: 02-04-2007 a las 16:47:14.
Responder Con Cita
  #6  
Antiguo 02-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Creo que el problema es el siguiente:
Código Delphi [-]
Form2.Image2.Picture.LoadFromFile('OtroNombreDeArchivo');

¿Donde creas el Form2?, por lo que veo al segundo formulario le llamas Ficha2 no Form2. Seguramente no te protesta al compilar porque delphi declara automáticamente una variable (Form2) con el mismo nombre de la clase (TForm2) pero sin la "T". Pero si no le indicas que cree el formulario automáticamente o lo creas tu por código, esa variable no apunta a nada, de ahí el "Access Violation".

La solución es sencilla, si la instrucción la estas escribiendo dentro de la definición del propio formulario, omite el nombre del formulario. Es decir:
Código Delphi [-]
Image2.Picture.LoadFromFile('OtroNombreDeArchivo');

Si por el contrario lo quieres hacer desde otro formulario, utiliza la variable correcta, en este caso "Ficha2".
Código Delphi [-]
Ficha2.Image2.Picture.LoadFromFile('OtroNombreDeArchivo');
Responder Con Cita
  #7  
Antiguo 02-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Cita:
Empezado por Bicholoco
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
var 
  Ficha2: TForm2;   begin //Creación de una ficha para introducir los datos   Ficha2 := TForm2.Create(Self);   With Ficha2 do        begin       Caption:= 'Esto es el form2';        showModal();        end;   end;

El problema es que no puedes hacer un Form2.loqesea, ya que el nombre de tu variable es Ficha2. Puedes hacer dos cosas, o declarar Ficha2 fuera del procedimiento Button1Click, para poder hacer Ficha2.Image1.LoadFromFile, o asignarle a Form2 el valor dentro del procedimiento, para hacerla externa y poder usarla. Algo así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
var 
  Ficha2: TForm2;  
begin //Creación de una ficha para introducir los datos  
  Ficha2 := TForm2.Create(Self);  
  With Ficha2 do  
  begin 
    Caption:= 'Esto es el form2';  
    showModal();  
  end;  
  Form2 := Ficha2;
end;

Entonces podrás usar Form2.Image1.LoadFromFile
Responder Con Cita
  #8  
Antiguo 02-04-2007
Avatar de Bicholoco
Bicholoco Bicholoco is offline
Miembro
 
Registrado: mar 2007
Posts: 21
Poder: 0
Bicholoco Va por buen camino
Aunque no lo dije (ag, fallo mío), le llamada la hago desde un procedure. Por ello estoy obligado a escribir Form2.xxx , Ficha2.xxx o lo que toque.

Os dejo un archivo zip con el problemilla. El error está en el procedure "CargarImagenRosa();"
Archivos Adjuntos
Tipo de Archivo: zip problema.zip (11,2 KB, 12 visitas)
Responder Con Cita
  #9  
Antiguo 02-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Bicholoco
Aunque no lo dije (ag, fallo mío), le llamada la hago desde un procedure. Por ello estoy obligado a escribir Form2.xxx , Ficha2.xxx o lo que toque.
¿Y por que lo haces desde ahi?, no te serviria crear un procedure dentro de la definicion del formualrio, de esta manera problema solucionado.

De todas formas:
Código Delphi [-]
procedure TForm2.Button2Click(Sender: TObject);
begin
  CargarImagenRosa(Self);
end;

// Observa que le pasamos como parametro el form
Procedure CargarImagenRosa(F: TForm2);
begin
  F.Image1.Picture.LoadFromfile('rosa.bmp);
end;
Responder Con Cita
  #10  
Antiguo 02-04-2007
Avatar de Bicholoco
Bicholoco Bicholoco is offline
Miembro
 
Registrado: mar 2007
Posts: 21
Poder: 0
Bicholoco Va por buen camino
Me voy a tirar por un puente. Creo que será la mejor forma de acabar con este sufrimiento...

Lo que me pones está muy bien. Pero ahora me da un error al compilar. Para que ese procedure tenga efecto, ha de estar declarado al principio de todo en el apartado type.

He escrito esto ent type:

procedure CargarImagenRosa(F:TForm2);

Pero me dice al hacer la sintaxys:

[Error]Unit2.pas: Unsatisfied forward or external declaration: 'TForm2.CargarImagenRosa'
Responder Con Cita
  #11  
Antiguo 02-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Bicholoco
Para que ese procedure tenga efecto, ha de estar declarado al principio de todo en el apartado type.
¿Por que?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cargar una imagen desde la web a un TImage asegura Gráficos 3 20-10-2006 03:13:10
Cargar una imagen desde internet a un TIMAGE Mr.Takito Gráficos 1 23-08-2005 02:32:02
Cargar un imagen a un Timage desde ORACLE kavisch Gráficos 11 14-07-2005 16:50:39
Cargar una imagen desde sitio en internet?? burasu Internet 10 01-09-2004 14:05:49
Cargar una Imagen desde Camara digital yayo Gráficos 1 16-01-2004 21:55:33


La franja horaria es GMT +2. Ahora son las 00:17:37.


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