PDA

Ver la Versión Completa : ¿Como se puede recuperar form oculto con hide?


lapidus
10-12-2010, 00:10:57
Hola,tengo hecho un programa que se inicia y se oculta al iniciar windows.



procedure Tform1.Timer1Timer(Sender: TObject);
begin
Programa;
begin
hide;

end;
end;

procedure Tform1.Regedit (run:byte; Nombre:string);
var
Registro:TRegistry;
begin
Registro:=TRegistry.create;
Registro.RootKey:=HKEY_LOCAL_MACHINE ;
case run of
1: if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then
Registro.WriteString('Programa', ParamStr(0));
0: if Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then
Registro.DeleteValue('Programa');
end;
Registro.free;
end;
procedure TCheckbox.iniciarconwindowsyocultarClick(Sender: TObject);
begin
if Iniciarconwindowsyocultar.Checked then
Regedit(1, 'Programa')

else
Regedit(0, 'Programa') ;

begin
if timer1.Enabled = true then
begin
Timer1.Enabled := iniciarconwindowsyocultar.Checked=true ;
ActivarPrograma.Caption:= 'Activar Programa y Ocultar'
end
else
begin
Timer1.enabled := iniciarconwindowsyocultar.Checked=true ;
ActivarPrograma.Caption:= 'Detener Programa'
end;
end;
end;
procedure Tform1.activarcapturaClick(Sender: TObject);
begin
if timer1.Enabled=true then
begin
Timer1.Enabled := false;
ActivarPrograma.Caption:='Activar Programa y Ocultar'
end
else
begin
Timer1.Enabled:=true ;
ActivarPrograma.Caption:='Detener Programa'
end;
end;
procedure Tform1.AveriguarInicio(nombre:string);
var
Registro : TRegistry ;
begin
Registro := TRegistry.Create ;
Registro.RootKey := HKEY_LOCAL_MACHINE;
Registro.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true) ;

if Registro.ValueExists('Programa')= true then
iniciarconwindowsyocultar.Checked:= true
else
iniciarconwindowsyocultar.Checked:= false ;

Registro.Free;
end;
procedure Tform1.FormCreate(Sender: TObject);

begin

AveriguarInicio('Programa');
end;



El programa funciona correctamente tanto en windows xp como en windows 7.El programa se oculta,tanto al activar el checkbox,como al presionar el button.Tambien hay un MainMenu asociado a cada uno de los botones.¿ Como se puede recuperar el form?.Es decir que vuelva a tener el foco.Gracias

Casimiro Notevi
10-12-2010, 00:43:37
Lo contrario de "hide" es "show"

Al González
10-12-2010, 06:00:54
¡Epa Casimiro! :)

¿Cuándo llegaste a los 10 mil mensajes? ¿Ya hay hilo de festejo? :eek: :confused: :)

lapidus
10-12-2010, 08:04:05
Si,ya lo he probado con 'show',lo he puesto en el formCreate y en el MainMenu he creado 'Mostrar' con Show.Pero no funciona.Yo me refiero a poder visualizarlo con una combinacion de teclas.Gracias.

Casimiro Notevi
10-12-2010, 09:47:03
¡Epa Casimiro! :)
¿Cuándo llegaste a los 10 mil mensajes? ¿Ya hay hilo de festejo? :eek: :confused: :)
je, je... ayer mismo :)

Casimiro Notevi
10-12-2010, 09:47:59
Si,ya lo he probado con 'show',lo he puesto en el formCreate y en el MainMenu he creado 'Mostrar' con Show.Pero no funciona.Yo me refiero a poder visualizarlo con una combinacion de teclas.Gracias.
¿Con una combinación de teclas?, ¿y qué problema tienes para hacerlo así?

lapidus
10-12-2010, 14:16:11
El problema que tengo es,que cuando el form esta oculto,no funciona ninguna de las combinaciones de teclas,que tengo en el MainMenu.Supongo que es porque el form no tiene el foco.Por ejemplo,para activar el programa tengo puesto en el shortcut ctrl+t.Gracias Casimiro Notevi.

Casimiro Notevi
10-12-2010, 14:23:41
Veamos si lo entiendo, el programa está minimizado en el "trayicon", junto al reloj de windows, no?
Y tú puedes estar en otro programa haciendo cualquier cosa.
Y quieres que con la pulsación de una combinación de teclas tu programa se active y muestre.
¿Es eso?

lapidus
10-12-2010, 20:34:00
Hola Casimiro Notevi.El programa no está al lado del reloj,sino que esta oculto.Solo se puede ver que se esta ejecutando desde el programador de tareas de windows-procesos.Cuando le das al boton Activar Programa el form
desaparece de la pantalla y se activa el programa(el boton esta asociado al timer).Tambien cuando marcas el checkbox (que tambien esta asociado al timer)lo oculta y lo activa para que al reiniciar windows corra en modo oculto.
Gracias Casimiro Notevi.

Casimiro Notevi
10-12-2010, 21:04:20
Echa un vistazo a este tema (http://www.clubdelphi.com/foros/showthread.php?t=68922&highlight=hook), creo que es lo que estás buscando.

lapidus
10-12-2010, 22:03:16
Gracias por tu tiempo,Casimiro Notevi.Mirare de probarlo durante este fin de semana.

lapidus
12-12-2010, 20:16:01
Gracias,Casimiro Notevi.Ha funcionado perfecto.Solo preguntarte otra duda.
Para marcar y desmarcar el CheckBox mediante el MainMenu ¿como se podria hacer?Gracias.

lapidus
12-12-2010, 21:11:04
Hola,ya lo he conseguido.He creado en el MainMenu 'Desmarcar Check'
con el siguiente codigo.


procedure Programa.DesmarcarCheck1Click(Sender: TObject);
begin
if iniciarconwindowsyocultar.Checked =true then
begin
iniciarconwindowsyocultar.Checked := false
end
else
begin
if iniciarconwindowsyocultar.Checked = false then
begin
iniciarconwindowsyocultar.Checked := true;
end;
end;
end;

Este codigo esta puesto en evento OnClick del 'Desmarcar Check' asociado a la tecla F5.
Gracias por tu ayuda Casimiro Notevi.

Casimiro Notevi
12-12-2010, 23:57:47
Todo ese código creo que lo mismo puedes reducirlo a esto:


procedure Programa.DesmarcarCheck1Click(Sender:TObject);
begin
iniciarconwindowsyocultar.Checked := not iniciarconwindowsyocultar.Checked;
end;