Ver Mensaje Individual
  #4  
Antiguo 20-11-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
MARIA_MAR,

Cita:
Empezado por MARIA_MAR Ver Mensaje
Esta ventana en la que veré el programa de la cámara, quiero que esté siempre visible.
Para mantener en pantalla una ventana fija, independientemente de que otras ventanas se activen se utiliza la función SetForegroundWindow.

Revisa este código el cual permite establecer (Activar y Desactivar) un form al Top Level Window de las otras ventanas:
Código Delphi [-]
// Activa el Top Level de una Ventana en Windows
procedure TForm2.Button1Click(Sender: TObject);
begin
   // API SetWindowPos: Establece el tamaño, posición y Orden Z de una ventana en Windows
   SetWindowPos(Self.Handle,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;

// Desactiva el Top Level de una Ventana en Windows
procedure TForm2.Button2Click(Sender: TObject);
begin
   // API SetWindowPos: Establece el tamaño, posición y Orden Z de una ventana en Windows
   SetWindowPos(Self.Handle,HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
Resumen: El código anterior permite activar una ventana de una aplicación en Delphi al Top Level Window con el parámetro HWND_TOPMOST y desactivarla con el parámetro HWND_NOTOPMOST.

Revisa este código el cual permite gestionar una aplicación externa, para el ejemplo se uso la Calculadora de Windows.
Código Delphi [-]
// Ejecuta una aplicación en Windows : Calculator
procedure TForm4.Button1Click(Sender: TObject);
begin
   ShellExecute(Handle, 'open', 'Calc.exe', nil, nil, SW_SHOWNORMAL);
end;

// Activa el Top Level de una Ventana en Windows : Calculator
procedure TForm4.Button2Click(Sender: TObject);
begin
   // API FindWindow : Encuentra si esta activa en Windows una aplicación y obtiene su handle
   Window := FindWindow(nil,'Calculator');

   // API SetForegroundWindow : Cambia el foco de la aplicación activa en Windows
   if SetForegroundWindow(Window) = True then
   begin
      // API ShowWindow: Muestra una ventana en Windows
      ShowWindow(Window, SW_SHOWNORMAL);
      // API SetWindowPos: Establece el tamaño, posición y Orden Z de una ventana en Windows.
      SetWindowPos(Window,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
   end
   else
      MessageDlg('La Calculadora No Esta Activa en Windows', mtInformation,[mbOk], 0);
end;

// Desactiva el Top Level de una Ventana en Windows : Calculator
procedure TForm4.Button3Click(Sender: TObject);
begin
   // API FindWindow : Encuentra si esta activa en Windows una aplicación y obtiene su handle
   Window := FindWindow(nil,'Calculator');

   // API SetForegroundWindow : Cambia el foco de la aplicación activa en Windows
   if SetForegroundWindow(Window) = True then
   begin
      // API SetWindowPos: Establece el tamaño, posición y Orden Z de una ventana en Windows
      SetWindowPos(Window, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
   end
   else
      MessageDlg('La Calculadora No Esta Activa en Windows', mtInformation,[mbOk], 0);
end;

// Muestra una aplicación en ForeGround : Calculator
procedure TForm4.Button4Click(Sender: TObject);
begin
   // API SetForegroundWindow : Cambia el foco de la aplicación activa en Windows
   if SetForegroundWindow(Window) = True then
   begin
      // API ShowWindow: Muestra una ventana en Windows
      ShowWindow(Window, SW_SHOWNORMAL);
   end
   else
      MessageDlg('La Calculadora No Esta Activa en Windows', mtInformation,[mbOk], 0);
end;

// Minimiza una aplicación : Calculator
procedure TForm4.Button5Click(Sender: TObject);
begin
   // API FindWindow : Encuentra si esta activa en Windows una aplicación y obtiene su handle
   Window := FindWindow(nil,'Calculator');

   // API SetForegroundWindow : Cambia el foco de la aplicación activa en Windows
   if SetForegroundWindow(Window) = True then
   begin
      // API CloseWindow: Minimiza una ventana
      CloseWindow(Window);
   end
   else
      MessageDlg('La Calculadora No Esta Activa en Windows', mtInformation,[mbOk], 0);
end;

// Cierra una aplicación : Calculator
procedure TForm4.Button6Click(Sender: TObject);
begin
   // API FindWindow : Encuentra si esta activa en Windows una aplicación y obtiene su handle
   Window := FindWindow(nil,'Calculator');

   // API SetForegroundWindow : Cambia el foco de la aplicación activa en Windows
   if SetForegroundWindow(Window) = True then
   begin
      // API SendMessage: Envia un mensaje a un ventana
      SendMessage(Window, WM_CLOSE, 0, 0);
   end
   else
      MessageDlg('La Calculadora No Esta Activa en Windows', mtInformation,[mbOk], 0);
end;
Resumen: El código anterior permite manejar con las APIs de Windows una aplicación externa y mantener su ventana siempre visible, quizás esta solución pueda adaptarse a tu proyecto.

Todo el código se encuentra implementado en el siguiente link: http://terawiki.clubdelphi.com/Delph...Management.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 20-11-2012 a las 19:22:08.
Responder Con Cita