Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Abrir archivo de Word pero incrustado en Form (https://www.clubdelphi.com/foros/showthread.php?t=50300)

mak8888 14-11-2007 09:22:53

Abrir archivo de Word pero incrustado en Form
 
Hola a todos. He revisado bastantes hilos que tratan del tWordDocument y tWordApplication, pero en todos ellos se abre la aplicación Word a parte. Yo lo que necesito es abrir un documento de Word dentro de mi formulario, incrustado. Es decir, para hacer un preview del documento.
También he visto un código que permite abrir un word en un tWebBrowser, pero no me funciona, dado que igualmente por algún motivo se abre el Word en una ventana aparte.
¿Tenéis alguna idea de si puede hacerse lo que necesito?
Gracias de antemano a todos.
Saludos

Neftali [Germán.Estévez] 14-11-2007 10:45:22

Busca en la página de Federico, hay ejemplos de cómo abrir una aplicación dentro de un formulario de Delphi.

mak8888 14-11-2007 11:02:25

Hola. Estoy viendo el programa de ejemplo "chproc.zip" aunque no consigo hacerlo funcionar dado que no veo que pase nada. Sigo haciendo pruebas a ver si descubro que pasa.
Gracias

Neftali [Germán.Estévez] 14-11-2007 11:42:19

Cita:

Empezado por mak8888 (Mensaje 246024)
Estoy viendo el programa de ejemplo "chproc.zip" aunque no consigo hacerlo funcionar dado que no veo que pase nada.

Si pulsas el botón se ejecuta una aplicación externa (en el caso del ejemplo el notepad de Windows) y esa aplicación se crea (o mejor dicho a posteriori de incrusta) en el formulario que tienes en la pantalla, buscando la ventana de la aplicación creada y cambiandole el Parent.

Yo la he compilado y me funciona a la perfección.

mak8888 14-11-2007 13:19:50

Pues a mi el notepad no me aparece en ningún sitio. Ni en el formulario, ni fuera de el. :confused: Estoy usando Delphi 7 y me sucede lo mismo tanto en Vista como en XP :eek:
El programa se ejecuta, pulso el botón y no sucede nada.
Gracias por tus respuestas.

Neftali [Germán.Estévez] 14-11-2007 13:35:45

Si revisas el código llegarás a esta línea:

Código Delphi [-]
  Win32Check(CreateProcess(nil, 'NOTEPAD.EXE', nil, nil, FALSE,
                    CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProccesInfo));

Sustituye NOTEPAD.EXE por cualquier otro programa que quieras; Puedes incluir el path para mayor seguridad.

Otra opción es sustituir el procedimiento entero por este otro, a ver si este te devuelve algun mensaje de error:

Código Delphi [-]
procedure TfrmMain.Button1Click(Sender: TObject);
var
  StartInfo: STARTUPINFO;
  ProccesInfo: PROCESS_INFORMATION;
  hNotepad: HWND;
begin
  ZeroMemory(@StartInfo, SizeOf(STARTUPINFO));
  with StartInfo do
  begin
    cb := SizeOf(STARTUPINFO);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := SW_HIDE;
  end;

  try
    Win32Check(CreateProcess(nil, 'c:\winnt\_NOTEPAD.EXE', nil, nil, FALSE,
                             CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProccesInfo));

    hNotepad := FindThreadWindow(ProccesInfo.dwThreadId, 0, nil, nil);
    if hNotepad <> 0 then begin
      { La muestra despues para evitar que se vea en equipos lentos }
      Windows.SetParent(hNotepad, sbSpool.Handle);
      ShowWindow(hNotepad, SW_SHOW);
    end
    else begin
      MessageDlg('No se ha encontrado la aplicación funcionando...', mtError, [mbOK], 0);
    end;
  except
    on E:Exception do begin
      MessageDlg(Format('Se ha producido un error: %s' ,[E.Message]), mtError, [mbOK], 0);

    end;
  end;
end;

mak8888 14-11-2007 13:46:48

Según el administrador de tareas, el notepad se ejecuta, aunque yo no lo veo por ningún sitio, por tanto no debe de ser problema de la ruta :confused:
P.D. Escribiendo el código que me pones arriba, cambiando evidentemente la ruta, pasa lo mismo. Se lanza un proceso notepad que no veo por ningún lado :-S
Lo raro es que a ti te funcione el mismo código.
P.D.2. Lo he probado en el PC de un compañero del trabajo y a el le funciona. Ahora sí no entiendo nada. En fin, gracias por todo. Seguiré haciendo pruebas.

Neftali [Germán.Estévez] 14-11-2007 14:16:00

Coloca esto debajo del ShowWindow para posicionar la nueva ventana.
Prueba con otra aplicación que no sea el notepad.

¿Qué S.O. tienes? ¿Tenéis ambos el mismo?

mak8888 14-11-2007 15:33:59

[quote=Neftali;246067]Coloca esto debajo del ShowWindow para posicionar la nueva ventana. QUOTE]
Qué tengo que colocar?

En la otra máquina ya va el notepad, desplazado pero va, supongo que será cosa de jugar con los parámetros. El porqué no va en mis 2 PC's ni idea la verdad. Uno es un Vista que es explicable, pero el otro es un portátil con XP y tampoco va. Mi compañero tiene un PC de sobremesa con XP y le va, desplazado como digo, pero se le ve. En mi portátil por mucho que maximice el formulario, el notepad no aparece por ningún sitio. En fin, espero que la persona que vaya a usar la aplicación le funcione :p aunque no es la solución. Sobretodo pq va a ser algo jodido depurar código si yo no veo que tal va.
Gracias por todo compañero.

Neftali [Germán.Estévez] 14-11-2007 16:45:41

Cita:

Empezado por mak8888 (Mensaje 246091)
Qué tengo que colocar?

Perdón, me dejé el texto...
Código Delphi [-]
      SetWindowPos(hNotepad, HWND_TOP, 0, 0,
                   sbSpool.ClientWidth,
                   sbSpool.ClientHeight,
                   SWP_SHOWWINDOW);

mak8888 14-11-2007 17:33:15

Hola. Muchas gracias por el código. A ver si mañana consigo averiguar porque no va en mis máquinas. Me has ayudado mucho.
Gracias de nuevo.
Saludos


La franja horaria es GMT +2. Ahora son las 07:53:59.

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