Ver Mensaje Individual
  #2  
Antiguo 24-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Reputación: 17
rgstuamigo Va por buen camino
Arrow

Si te estoy entendiendo bien, pues creo que lo que necesita es crearte tu propio mensaje de ventana y enviarlo con la Api SendMessage a la ventana activa;
Para Obtener la ventana activa puedes usar la API GetActiveWindow que te devuelve el handle de la ventana activa.
Pero para que cualquier Formulario pueda capturar tu "mensaje de ventana personalizado" debes crearte en cada uno, el procedure correspondiente de capturamiento.
Resumiendo y ejemplificando todo lo anterior tenemos :

Primero debemos declararnos un mensaje de ventana propio, eso lo podemos hacer en cualquier unidad, solo hay que tener en cuenta que dicha unidad va ser usada por todos los formularios de la aplicacion.
Código Delphi [-]
Const
 WM_MyMENSAJE=WM_USER+30; // mi mensaje tiene como Identificador WM_MyMENSAJE
// se puede poner cualquier nombre de identificador
Segundo en el evento Onnotice del componente DB del modulo de datos, debes enviar el mensaje de ventana que hemos creado, a la ventana activa de la aplicacion más o menos así:
Código Delphi [-]
...
 var h:THandle;
begin
  h:=GetActiveWindow;// obtengo el handle de la aventana Activa
 SendMessage(h,WM_MyMENSAJE,0,0);// mando mi mensaje a la ventana Activa
...
end;
Finalmente para que en cualquier ventana nos demos cuenta que ha llegado el mensaje WM_MyMENSAJE pues debemos crearnos el procedimiento(Procedure) que capture el momento de recibir nuestro mensaje de ventana( en nuestro caso es WM_MyMENSAJE), entonces nos nos queda de otra que crearnos dicho procedimiento en todos y cada uno los formularios de la siguiente manera:
Código Delphi [-]
....
 private
    { Private declarations }
 Procedure Capturar_Mensaje(Var msg:TMessage); message WM_MyMENSAJE;// voy a capturar el mensaje WM_MyMENSAJE 
  public
    { Public declarations }
  end;
Y la implementacion asi:
Código Delphi [-]
procedure TForm1.Capturar_Mensaje(var msg: TMessage);
begin
ShowMessage('Ha llegado un mensaje');
{Código para hacer algo cuando recibamos el mensaje}
...
...
end;
Quizás algunos dirán: "Pero es muy laborioso crear éste procedimiento cuando son muchos formulario", pues en ese caso se podría crear un formulario Padre que implemente dicho procedure y todos los otros heredar de él. Eso debería funcionar ya que los formulario hijos ya heredan la implementacion del capturamiento de nuestro mensaje.
Espero haberte podido ayudar.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita