Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2017
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Ver mi aplicación dentro de otra

Buen día a todos

Tengo la duda de que si es posible visualizar
Mi programa dentro de una aplicación externa

Estaba pensando en poner mi form adelante de
Todos los demás programas, justo en el momento
En que la otra aplicación esté activa en pantalla

Claro que esto daría el efecto siempre y cuando la otra aplicación se muestre maximizada, pero si no es así no daría el efecto esperado.

Por eso quería saber si hay algún método más acertado para esto.

Espero se haya entendido mi pregunta, de antemano​ muchas gracias.
Responder Con Cita
  #2  
Antiguo 09-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Quizás debas explicar mejor lo que pretendes. Para colocar tu ventana delante de todas cuando determinada App está activa, no hace falta nada más que detectar que dicha app se está ejecutando. Sobre como detectar si una app se ejecuta hay ejemplos en el foro. Aquí una forma de saberlo:
Código Delphi [-]
function IsRuning(FileName: PAnsiChar): boolean;
var
  PE: TPROCESSENTRY32;
  ProcessHandle: THandle;
begin
  Result:= false;
  PE.dwSize:= sizeof(TPROCESSENTRY32);
  ProcessHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Process32First(ProcessHandle, PE) then
    repeat
      if lstrcmpi(PE.szExeFile, FileName) = 0 then
      begin
        Result:= true;
        break;
      end;
    until not Process32Next(ProcessHandle, PE);
  CloseHandle(ProcessHandle);
end;
Seguidamente con la API SetWindowPos aplicada a tu ventana, en el parámetro hWndInsertAfter pones HWND_TOPMOST


Saludos.
Responder Con Cita
  #3  
Antiguo 10-04-2017
deliriun deliriun is offline
Miembro
 
Registrado: ago 2014
Posts: 51
Poder: 10
deliriun Va por buen camino
Gracias por tu respuesta Escafandra

Me intentaba referir a que el Form de mi aplicación se vea delante del programa externo, y sí había pensado en lo que comentas
hacer que mi Form se ponga en Top justo cuando la otra aplicación se encuentra en primer plano, Claro sería una buena solución
pero me parece que esto solo se cumpliría si la aplicación externa se muestra en pantalla completa, no creo que de el efecto
cuando la Aplicación externa se muestre en solo una parte de la pantalla no?

Tal vez para esto sería útil buscar las coordenadas en la aplicación externa, Y luego hacer que el Form mío solo se pueda
mostrar en las coordenadas de la otra aplicación, algo así como aplicar un limite.

Pero, Mi duda es si no hay un método más eficiente para realizar esto, Espero que ahora si se haya entendido lo que trato de conseguir

Gracias por la ayuda
Responder Con Cita
  #4  
Antiguo 10-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El siguiente código usa un Timer para encontrar la ventana activa, si se trata del notepad se colocará el formulario sobre él:

Código Delphi [-]
function GetExeNameByWnd(Wnd: HWND): String;
var
  snp: THANDLE;
  lppe: TPROCESSENTRY32;
  dwProcessId: DWORD;
begin
  Result:= '';
  GetWindowThreadProcessId(Wnd, dwProcessId);
  snp:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
  begin
    lppe.dwSize:= sizeof(lppe);
    if Process32First(snp, lppe) then
      repeat
        if lppe.th32ProcessID = dwProcessId then
        begin
           Result:= AnsiString(lppe.szExeFile);
           break;
        end;
      until not Process32Next(snp, lppe);
  end;
  finally
     CloseHandle(snp);
  end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:= 'Me pongo sobre el notepad';
  if GetExeNameByWnd(GetForegroundWindow) = 'notepad.exe' then
  begin
    Application.Restore();
    SetWindowPos(Handle, HWND_TOPMOST,0,0,0,0, SWP_NOSIZE or SWP_NOMOVE);
  end;
end;


Saludos.
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
Una aplicación dentro de otra lormurlok C++ Builder 8 26-05-2012 15:15:48
Meter una aplicacion dentro de otra FrianxD C++ Builder 11 22-01-2010 19:53:33
Como ejecutar una aplicacion de delphi dentro de otra? Luis Alberto Varios 2 30-11-2005 01:31:39
problemas al integrar una aplicación dentro de otra aranel Varios 1 23-10-2005 02:40:00
Ventana dentro de otra CarmaZone Varios 4 28-03-2005 11:34:55


La franja horaria es GMT +2. Ahora son las 18:31:34.


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