PDA

Ver la Versión Completa : traer form adelante


calco_hugo
13-07-2010, 21:32:56
ante todo buenas tardes, tengo un pequeño problema, necessito traer mi form adelante de cualquier otra aplicacion (no juegos), mi aplicacion esta minimizada, y al presionar, por ej la tecla "*" traiga el form1 a delante de la aplicacion que se esta ejecutando, todo lo que intente hasta ahora solo hace titilar en la barra de tareas la aplicacion, lo que estoy haciendo es en delphi 7 y sistema OP XP.
desde ya muchas gracias

rgstuamigo
13-07-2010, 22:09:41
Si te estoy entendiendo bien, lo que necesitas es tan solo poner la propiedad FormStyle=fsStayOnTop de tu formulario, ésto hará que tu formulario simpre esté por sobre cualquier aplicacion, parecido a la ventana del "Administrador de tareas de Windows";)
Ahora si tan solo quieres solamente que tu formulario tenga el "focus" y se venga hacia adelante pues tan solo puedes Hacer ésto:
Form1.BringToFront;;)
Saludos...:)

calco_hugo
13-07-2010, 22:24:36
no me resulta en delphi 7 y SO XP, solo titila en la barra de tareas, lo que necesito es tape cualquier otro prog. en ejecucion (ojo no juegos), pero te agradezco lo rapido de la respuesta
hugo

rgstuamigo
13-07-2010, 22:47:29
No me había dado cuenta que si tu formulario está minimizado:rolleyes:, pues no creo que te funcione ya que al minimizar el formulario ,éste pierde el foco.;) y creo que por ahí va la cosa.;).
Supongo que en ese caso deberías usar un Hook (http://www.rinconcitodelphi.com/trucos/IApi24.htm)(gancho) para detectar la combinacion de teclas que pulsas.;).
Saludos...:)

calco_hugo
13-07-2010, 23:24:17
desde ya mas que agradecido por tus prontas respuestas (no se hasta que hora me quedare hoy con esto, lo tengo que tener para mañana), pero te comento, tengo ttimer en la aplicacion, en el evento

if GetAsyncKeyState( Ord( '8' ) ) = -32767 then
begin
form1.formStyle := fsStayOnTop
end;

(en este caso la tecla 8)

Pero no logro en ningun caso que la aplicacion pase a primer plano y tenga el foco, (ni siquiera logro que pase a primer plano), lo mas que logro es que la aplicacion en la barra de tareas titile.-
hugo

escafandra
14-07-2010, 01:18:28
Prueba así:

if (GetAsyncKeyState( Ord( '8' ) ) and $8000)<>0 then
Form1.FormStyle := fsStayOnTop;

Saludos.

calco_hugo
14-07-2010, 16:54:50
if (GetAsyncKeyState( Ord( '8' ) ) and $8000)<>0 then
Form1.FormStyle := fsStayOnTop;

lamentablemente no funciono, pero desde ya muchas gracias por sus
prontas respuestas

escafandra
14-07-2010, 17:10:10
No se como lo estás usando, pero si funciona.

Ten en cuenta de que para que se detecte la pulsación de la tecla, se debe ejecutar al API GetAsyncKeyState. Ésta detecta la última cecla pulsada desde la última ejecución. Una forma fácil de implementarlo es en un Timer con un intervalo de 100ms, por ejemplo.
Código Delphi [-] (http://clubdelphi.com/foros/#)procedure TForm1.Timer1Timer(Sender: TObject); begin if (GetAsyncKeyState( Ord( '8' ) ) and $8000)<>0 then Form1.FormStyle := fsStayOnTop; end;


Saludos.

calco_hugo
14-07-2010, 17:19:00
escafandra, mil disculpas, si funciona, con el ejemplo que me pasaste funciona correctamente, cuando lo probe antes de tu respuesta lo hice mal (tapado de trabajo), al correjirme funciona perfecto, desde ya muchas gracias, abusando de tu amabilidad y sapiensa, como detecto la tecla + del teclado numerico, ya que es el unico teclado que tendra el sistemaa implementar, desde ya gracias a todos y disculpen mi error
hugo

escafandra
14-07-2010, 19:26:08
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (GetAsyncKeyState(VK_ADD) and $8000)<>0 then
Form1.FormStyle := fsStayOnTop;
end;


Saludos.

calco_hugo
15-07-2010, 04:25:41
muchas gracias
hugo

escafandra
15-07-2010, 20:40:55
Si te interesa, tienes otra forma de realizar lo mismo pero no usando la API GetAsyncKeyState ni, por tanto, un Timer. Se trata de registrar un HotKey y asociarle un evento:


unit Unit1;

interface

uses Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure HotKey(var Message: TMessage); message WM_HOTKEY;
end;

var Form1: TForm1;

implementation

{$r *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1, 0, VK_ADD);
end;

procedure TForm1.HotKey(var Message: TMessage);
begin
if Message.WParam = 1 then
begin
Form1.FormStyle := fsStayOnTop;
end;
end;

end.


Tu dirás cual método te conviene mejor.


Saludos.

Lepe
16-07-2010, 11:13:15
ummm...

Es buena práctica quitar el registro de esa tecla con UnregisterHotkey en el formClose de la ventana ;)

calco_hugo
16-07-2010, 19:28:36
desde ya muchas gracias, y la verdad mas que atentos todos
hugo

waly2k1
26-07-2010, 11:32:32
Y otra vez yo Lepe....
Estoy buscando algo parecido. El tema es que el minimize en Win7 no siempre funciona y se pierde la aplicación, se ve el icono en la barra de tareas, pero inaccesible y desaparece de la lista del administrador de tareas, se ve en la solapa servicios, pero ho hay forma de restaurar. Con lo cual hay que finalizar la aplicación y reiniciarla.
Saludos y gracias de antemano!
Walter