Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Mostrar TImage en aplicación externa (https://www.clubdelphi.com/foros/showthread.php?t=15867)

LoBo2024 08-11-2004 11:32:56

Mostrar TImage en aplicación externa
 
Como podria hacer que al clickar sobre la imagen del tImage se abrierá en una aplicación externa? hay posibilidades de elegir la aplicación? si se abre con el programa que tengan por defecto para esa aplicación también me vale, muchisimas gracias ;)

Neftali [Germán.Estévez] 08-11-2004 12:36:46

Cita:

Empezado por LoBo2024
Como podria hacer que al clickar sobre la imagen del tImage se abrierá en una aplicación externa? hay posibilidades de elegir la aplicación? si se abre con el programa que tengan por defecto para esa aplicación también me vale...

Bueno, todo los que comentas se puede hacer; Abrir la imagen, en el programa por defecto o en otro. La única premisa (para facilitar el trabajo es que la imagen exista en disco); Por ejemplo puedes crearla en un dir. temporal (y luego borrarla si no te interesa);
Para abrirla con el programa por defecto puedes utlizar WinExec o ShellExecute. Añade al USES la uni ShellAPI;

Código Delphi [-]
  // Grabar la imagen
  Image1.Picture.Bitmap.SaveToFile('c:\temp\pictmp1.bmp');
  // Abrirla (con el programa por defecto)
  ShellExecute(0, 'Open', PChar('c:\temp\pictmp1.bmp'), nil, nil, SW_SHOW );
  // Espero 3 segundos
  sleep(3000);
  // La borro
  DeleteFile('c:\temp\pictmp1.bmp');
 
  // BIS, pero con WinExec y pasando programa y parámetros
  Image1.Picture.Bitmap.SaveToFile('c:\temp\pictmp1.bmp');
  WinExec(PChar('mspaint ' + 'c:\temp\pictmp1.bmp'), SW_SHOW);
  sleep(3000);
  DeleteFile('c:\temp\pictmp1.bmp');

Otra opción es utilizar CreateProcess, es un poco más complejo, pero también más completo; Un ejemplo podría ser el siguiente (con éste puedes utilizar otro programa -por ejemplo el PhotoEditor de MS-)

Código Delphi [-]
var
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
begin
  // Grabar la imagen
  Image1.Picture.Bitmap.SaveToFile('c:\temp\pictmp1.bmp');
  // rellenamos la estructura necesaria
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := 1{0 no visible, 1 Visible};
  // Llamada
  CreateProcess(
      PChar('c:\Archivos de programa\Archivos comunes\Microsoft Shared\PhotoEd\PHOTOED.EXE'), {Nombre del EXE}
      PChar(' c:\temp\pictmp1.bmp'), {Nombre del parámetro -imagen-}
      nil,
      nil,
      false,
      CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      StartupInfo,
      ProcessInfo);
  // Esperar 3 segundos
  sleep(3000);
  // borrar el fichero
  DeleteFile('c:\temp\pictmp1.bmp');

LoBo2024 08-11-2004 12:49:20

Muchisimas gracias me ha funcionado perfectamente, muy bien explicado y me ha quedado todo clarisimo, gracias por tu ayuda ;)


La franja horaria es GMT +2. Ahora son las 23:40:20.

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