PDA

Ver la Versión Completa : Que Evento Es El Que Se Genera!!!!!


xio
12-12-2007, 17:19:23
Yo minimizo mi aplicacion, y necesito saber cual es el evento que se genera al resaurarla de la barra de tareas!!!!!!!!!! Necesito realizar una operacion cuando se genere este evento pero no se cual es.

Espero que alguien pueda ayudarme!!

Un saludo!

Gracias!

maeyanes
12-12-2007, 17:43:50
Hola...

Este tema ya se ha tratado algunas veces en estos foros...

Ya intentaste haciendo una búsqueda?


Saludos...

xio
12-12-2007, 19:31:01
Si pero no he conseguido resultado, el problema es que los filtros que uso para la busqueda no son buenos.

Si sabes de algun hilo sobre esto te agradeceria que me lo indicaras.

Gracias!

AzidRain
12-12-2007, 21:22:52
OnMinimize

Gabo
13-12-2007, 09:01:38
OnMinimize

Perdón, pero creo que lo que necesita es OnRestore.

Aunque es cierto que buscando por una u otra palabra encontrará la información que busca.

xio
13-12-2007, 10:25:05
Pues OnMinimize es cuando la aplicacion se va a la barra de tareas pero cuando queremos restaurarla de la barra de tareas no es OnRestore, no se cual es. Sin embargo cuando pincho en el boton maximizar y vuelvo a pinchar en el para que vuelva al estado anterior si se produce el evento OnRestore.

Estoy perdida!

Gabo
13-12-2007, 10:40:17
Tienes razón.

No sé si te pueda servir OnActivate que es cuando la aplicación se ejecuta y cuando vuelve a estar activa.

juanlaplata
13-12-2007, 14:17:46
property OnShow: TNotifyEvent;

Description

Use OnShow to perform special processing when the form is shown (that is, when the form’s Visible property is set to True).

El Evento OnShow del Form que manipulas.
Fuente: ayuda de delphi.
Creo que esta ahi la cosa.

xio
13-12-2007, 19:11:09
El evento OnActivate tampoco es y el OnShow lo he provado y nada.


A ver yo utilizo la siguiente rutina para comprobar el evento que se genera:Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TFormMenu.WMSysCommand(var Message: TWMSysCommand);
begin
//
ShowMessage(IntToStr(Message.CmdType));
inherited;
end;





Con eso podeis comprobar que al minimizar la aplicacion aparece un mensaje con un numero, pero al restaurarla de la barra de tareas no aparece nada. Quiere decir esto que no se puede controlar desde delphi????

Gabo
14-12-2007, 10:44:29
La verdad no tengo idea si hay algún evento como el que buscas, pero creo que con un poco de imaginación podrías lograrlo, al fin y al cabo, si se produce el evento OnMinimize y luego el OnActivate, es lógico pensar que el usuario ha minimizado y luego restaurado desde la barra de tareas. Bastaría con que guardaras el estado de minimizado y luego comprobaras ese estado en el evento OnActivate (o el OnShow).

Es una idea nada más, no sé si a alguien se le ocurrirá algo mejor.

xio
14-12-2007, 11:20:41
No eso no sirve porque cuando restauro la aplicacion de la barra de tareas no pasa por activate entonces no puedeo controlarlo por ahí.

A nadie le a pasado esto alguna vezzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!

Gabo
14-12-2007, 11:49:02
Sólo por estar seguro, ¿estamos hablando del mismo OnActivate?

Yo me refiero al de la aplicación.


TCustomForm::OnActivate
Occurs when the form becomes active.
__property Classes::TNotifyEvent OnActivate = {read=FOnActivate, write=FOnActivate, stored=IsForm};
Description
Use OnActivate to perform special processing when the form receives focus. A form becomes active when focus is transferred to it (when the user clicks on the form, for example).
Note: The OnActivate event of the application (TApplication), not the form, occurs when Windows switches control from another application.

Gabo
14-12-2007, 15:48:37
Acabo de comprobarlo en un rato libre que he tenido y funciona sin problemas.

Es lo que ya sabes:

1.- Un objeto TApplicationsEvents.

2.- El siguiente código para el OnMinimize y el OnRestore (está en C++Builder):


void __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender)
{
Application->MessageBox("Minimizándome", "Información");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Restore(TObject *Sender)
{
Application->MessageBox("Restaurándome", "Información");
}



Si no te resulta debe ser otro el problema...

gluglu
14-12-2007, 16:20:52
procedure TMainform.FormCreate(Sender: TObject);
begin

Application.OnActivate := TuFuncion;

end;

No hace falta añadir ningún Objeto ni nada.

Se ejecutará cada vez que desde cualquier otro programa se devuelva el control a tu aplicación, esté o no minimizada en la barra de tareas.

xio
17-12-2007, 11:36:32
Exactamente lo que quiero conseguir es lo siguente mantener la pantalla principal de la aplicacion siempre detras de las ventanas que se vayan abriendo, esto lo utilizo en la funcion OnActivate:


procedure TFormMenu.FormActivate(Sender: TObject);
begin
//
FormMenu.SendToBack;
end;


y esto funciona bien hasta que minimizo la aplicacion en la barra de tareas y la restauro, cuando realizo esta operacion las ventanas que estaban abiertas aparecen detras del menu y no tendria por que. Lo he probado todo y no se que mas hacer.

Un saludo, y gracias!

xio
08-01-2008, 17:16:39
Nadie sabe nada sobre este tema??? :confused: Seguro que a alguien le a pasado alguna vez!!! :(

Chris
08-01-2008, 21:27:17
Hola Xio,

Lo primero que debes hacer es cambiar el código on el evento OnActivate del Form, cambialo por este otro:

Procedure TFormMenu.FormActivate(Sender: TObject);
Begin
SetWindowPos(Handle , HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or
SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOREPOSITION);
end;


el segundo paso es evitar que el formulario principal se ponga en sobre los demás cuando es movido, para esto tendrás que declarar en el private el siguiente procedimiento

type
TFormMenu = class(TForm)
....
.......
private
{ Private declarations }
Procedure FormPosChanged(var Msg: TMessage); message WM_WINDOWPOSCHANGED;


El procedimiento FormPosChanged, lo implementarás así:

procedure TFormMenu.FormPosChanged(var Msg: TMessage);
begin
SetWindowPos(Handle,HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE or
SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOREPOSITION);
Msg.Result := 0;
end;


Con este código, ya podrás tener una ventana que siempre esté bajo las demás.

Saludos.

PD: Como a forma de cosejo, me parece que el titulo del hilo no es el adecuado. Todo indicaba que lo que querías era saber el mensaje que se envia cuando la aplicación se restaura, que en todo caso, siempre sería recomendable utilizar los códigos que los compañeros han posteado.

xio
09-01-2008, 09:39:55
Pensaba que en esta zona del foro esta bien colocado el hilo, pero ya veo que no. De todas formas muchisimas gracias. La proxima vez intentare ubicar bien el hilo, y explicarme mejor. Por otro lado todo lo que me recomendaron los compañeros lo probé y no funcionó. Un saludo!!!:p

Chris
09-01-2008, 15:31:42
Pensaba que en esta zona del foro esta bien colocado el hilo, pero ya veo que no. De todas formas muchisimas gracias. La proxima vez intentare ubicar bien el hilo, y explicarme mejor. Por otro lado todo lo que me recomendaron los compañeros lo probé y no funcionó. Un saludo!!!:p

Auque seguramente no vuelvas a visitar este hilo, por si acaso:
El hilo está colocado en el foro indicado. Lo que pasa es que como te había dicho, el titulo no es el adecuado, talvez hubiese sido mejor colocarle algo como por ejemplo: "Mantener ventana siempre detrás de todas" o algo así.

Saludos.

xio
09-01-2008, 16:28:10
Estupendo, para la proxima intentaré buscar un titulo lo mas adecuado posible. Un saludo y lo dicho muchisimas gracias a todos!!