Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problemas con Topenpicuredialog (https://www.clubdelphi.com/foros/showthread.php?t=36610)

oregon 18-10-2006 10:08:56

Problemas con Topenpicuredialog
 
Saludos,

Tal vez la pregunta sea de lo más tonta, pero no llevo mucho tiempo en esto y he visto que por aquí andan auténticos expertos.
Trabajo con Turbo Delphi 2006 en windwos xp -Home.

Tengo un problema con Topenpicturedialog. En un form tengo un Timage. Para asignarle una imagen en runtime, tengo un componente Topenpicturedialog. He añadido la clausula jpeg a Uses.
Para asignar la imagen, en el onclose del componente topenpicturedialog he hecho:

image1.picture.loadfromfile(topendialog1.filename);

y me da error. Me dice que no reconoce la extensión. He probado con bmp, ico, png,... en fin, todo tipo de imágenes y no hay manera.

Por ver si era otro tipo de error, he creado una variable y la he llamado de la siguiente manera en el onclose:
var
img:string;
beging
img:=topenpicturedialog1.filename;
image1.picture.loadfromfile(img);
end

y nada de nada. Con el fin de ver cual es el problema, he creado un label y le he asignado el valor de img en el caption, y oh sorpresa!, me muestra símbolos y no el path a ninguna imagen.

¿Estoy haciendo bien las cosas? ¿donde estoy metiendo la pata? Solo quiero que el usuario busque y carge la imagen que quiera en el componente timage...

Muchas gracias por ayudarme con esto.
Ciao!

M.A. de Pablo

dec 18-10-2006 10:15:09

Hola,

Generalmente no es en el evento "OnClose" del componente que mencionas donde se accede a la imagen en cuestión. De hecho es posible que en ese evento la propiedad "FileName" no sea la correcta: esto deberías comprobarlo, simplemente, echándola un vistazo ("ShowMessage") o, directamente, viendo si existe el archivo con "FileExists" por ejemplo.

Pero, como he dicho, como norma general (vale para el resto de cuadros de diálogo similares) se accede a la propiedad "FileName" acto seguido de presentar al usuario el diálogo en cuestión. Es más fácil verlo que otra cosa:

Código Delphi [-]
begin
  with TOpenPictureDialog.Create(Self) do
  begin
    if(ShowModal = mrOk)
    begin
      ShowMessage(FileName);
    end;
  end;
end;

O, de otro modo:

Código Delphi [-]
var
  dlg: TOpenPictureDialog;
begin
  dlg := TOpenPictureDialog.Create(Self);
  try
    if dlg.ShowModal = mrOk then
    begin
      ShowMessage(dlg.FileName);
    end;
  finally
    dlg.Free;
  end;  
end;

Nota que el código, aunque sencillo, no está comprobado: puede que se me fuera alguna cosa, pero, la idea que trata de exponer es la siguiente: se muestra al usuario el diálogo de forma "modal", esto es, el usuario deberá elegir un archivo de imagen (en este caso) o, simplemente, cancelar el diálogo.

Tú únicamente estarás pendiente de que cuando se cierre el diálogo "ShowModal" te retorne la constante "mrOk", lo que significará que el usuario ha elegido, efectivamente, un archivo. Entonces puedes obrar en consecuencia y hacer lo que tengas que hacer con dicho archivo. En todo caso no dejes de revisar las opciones conque cuentan estos tipos de diálogos.

seoane 18-10-2006 12:56:01

Cita:

Empezado por dec
if dlg.ShowModal = mrOk then

:confused: Hasta donde yo se los diálogos no cuentan con el método ShowModal. ¿Por que no usar el clásico Execute?

Código Delphi [-]
  if dlg.Execute then

dec 18-10-2006 13:30:50

Hola,

Así es la verdad Domingo. Obviamente me equivoqué y donde dije "ShowModal" quería decir "Execute". ;)

Con la particularidad de que sobra la comparación "Execute = mrOk", que, además de no funcionar, no es precisa.

Pido disculpas.

oregon 18-10-2006 16:40:26

Funciona!
 
Perfecto!

Muchas gracias a todos, porque siempre encuentro soluciones interesante navegando por el foro y aprendiendo de toda vuestra experiencia.

Ciao!


La franja horaria es GMT +2. Ahora son las 21:13:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi