Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Maximizar una aplicacion abierta (https://www.clubdelphi.com/foros/showthread.php?t=64940)

duranguenze 11-11-2009 01:14:46

Maximizar una aplicacion abierta
 
Saludos, he estado viendo como evitar que se abra una aplicacion, lo encontre mediante api de window, pero ahora me encuentro con el inconveniente de que si la aplicacion se encuentra minimizada esta no se muestra, he podido hacer que se pase adelante, mediante un truco de estado, pero quisiera saber como poder maximizarla desde delphi 7 que es donde me permiten trabajar. Buscando en las api no he encontrado la respuesta, solo referencias a como deberia de ser pero nada en concreto...

Gracias de ante mano.

escafandra 11-11-2009 01:28:13

Código Delphi [-]
ShowWindow(Handle, SW_MAXIMIZE);

Saludos.

duranguenze 11-11-2009 03:14:13

Agradezco la respuesta, pero al parecer no se puede de esa manera, complementando, he hecho que se muestre desde la aplicación anterior, por lo que podria ser fácil si tan solo existiera algo como "application.windowRestore" ya probé con application.restore y no me funciona.
el siguiente código es el que encontré pero solo me funciona el primer procedimiento que es el que uso para pasarlo hasta adelante.
Código Delphi [-]
procedure PonerDelante(Handle: THandle);
var
  FgThreadId  : DWORD;
  AppThreadId : DWORD;
begin
  FgThreadId  := GetWindowThreadProcessId(GetForegroundWindow, nil);
  AppThreadId := GetWindowThreadProcessId(Handle, nil);
  AttachThreadInput(AppThreadId, FgThreadId, true);
  SetForegroundWindow(Handle);
  AttachThreadInput(AppThreadId, FgThreadId, false);
end;

procedure MostrarVentana(WindowName:PChar);
var H: THandle;
begin
  H:= FindWindow(nil,WindowName);//Buscamos el nombre completo que tiene en la barra
  if(H>0) then begin
    if IsIconic(h)then
      ShowWindow(H,SW_RESTORE);
    SetForegroundWindow(H);
    PonerDelante(h);//ShowWindow(h,SW_NORMAL);//La mostramos
  end;
end;

Axel_Tech 11-11-2009 09:59:26

A ver esto:
Código Delphi [-]
Form1.WindowState := wsMaximized;

escafandra 11-11-2009 11:42:27

Cita:

Empezado por duranguenze (Mensaje 346202)
...he estado viendo como evitar que se abra una aplicacion, lo encontre mediante api de window, pero ahora me encuentro con el inconveniente de que si la aplicacion se encuentra minimizada esta no se muestra...

Tal vez deberíamos empezar por el principio. Explícate ¿que es eso de evitar que la aplicación se abra y que luego no puedes mostrar la ventata?:eek:. Realmente no se que has hecho con esa aplicación ni que quieres hacer.:confused:

Saludos.;)

duranguenze 11-11-2009 19:18:29

Es una aplicación de reloj checador lo cual debe haber solo una instancia, ya que usa una web cam como cerficacion de que si checo la persona, se implemento este sistema en vez de una huella digital ya que los trabajadores salian con las manos tan maltratadas que no lo reconocia el lector de huellas, el problema es que al estar minimizada los trabajadores quieren abrir el programa y entonces la cámara no esta disponible, y no checan bien, le puse un codigo para que solo tubiese una instancia y se cierra, ahora lo que falta es que se maximize desde la barra de herramientas, cosa que no he logrado...

No se a que se deba pero lo que he intentado no me ha funcionado.

escafandra 11-11-2009 20:28:41

Te muestro como resolví ese problema en C (Builder):

Código:

//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  char AppName[] = "MI_Aplicacion";
  Application->Title = "XXMI_AplicacionXX";
  HWND W = ::FindWindow("TApplication", AppName);
  HWND H = ::FindWindow("TApplication", Application->Title.c_str());
  Application->Title = AppName;
  if(W){
      ShowWindow(W, SW_RESTORE);
      SetForegroundWindow(W);
      Application->Terminate();
      return 0;
  }

  try
  {
      Application->Initialize();
      Application->CreateForm(__classid(TForm1), &Form1);
      Application->Run();
  }
  catch (Exception &exception)
  {
      Application->ShowException(&exception);
  }
  return 0;
}
//---------------------------------------------------------------------------

Si se intenta volver a ejecutar lo que hace es mostrar la ventana de la aplicación que ya estaba abierta cerrando la nueva que se está creando. Nunca me dio problemas para maximizar desde la barra de tareas.

Saludos.

duranguenze 11-11-2009 20:46:20

Tal ves sea que el Delphi 7 me odia desde que lo conosco, no he tenido problemas con algun otro lenguaje, pero con D7 hasta errores que ni en la vida sabia que podian existir.

El ejemplo que pones, es el que intente poner en un inicio, pero aun nada, no se que este haciendo mal, pero no me funciona, ni desde la instancia que esta activa ni en la nueva.

escafandra 13-11-2009 01:17:26

Al parecer Club Delphi debe seguir teniendo problemas. Dos mensajes que dejé ayer, en diferentes temas, han desaparecido.

Voy a retomar este hilo donde se amputó publicando un ejemplo en delphi:
Código Delphi [-]
program Project1;

uses
  Windows, Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var
 W : Integer;
begin
  Application.Title:= 'XXMi_AplicacionXX';
  W:= Windows.FindWindow(PCHAR('TApplication'), 'Mi_Aplicacion');

  Application.Title:= 'Mi_Aplicacion';

  if(W<>0) then
  begin
    ShowWindow(W, SW_RESTORE);
    SetForegroundWindow(W);
    Application.Terminate;
  end else;
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.

Saludos.

duranguenze 13-11-2009 02:11:27

O te están baneando por alguna razón... hay que indagar un poco para ver si es por casualidad o por otra cosa.

roman 13-11-2009 16:31:32

Al parecer, algo no había quedado bien en la instalación del servidor y Emilio tuvo que restaurarlo ayer o antier por la noche (no recuerdo bien) y es posible que debido a eso se hayan perdido algunos mensajes. En todo caso, lamento que se haya perdido algo, pero desde luego no es un asunto de amputar hilos no de censurar a nadie.

// Saludos

escafandra 13-11-2009 21:19:28

Tranquilo, roman, nunca pensé en otra cosa que no fueran coletazos del ultimo terremoto ;).

Es una lástima que se pierda información. Un día es perfectamente recuperable por los propios miembros. Seis meses es mucho mas complejo, pero no se va a morir el club por eso.:)

Gracias roman por tu intervención y aclaración.

Saludos.


La franja horaria es GMT +2. Ahora son las 06:36:09.

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