Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2017
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Question saber que formularios he abierto

Buenas buenas gente saludos. Alguno de ustedes sabra como obtener todos los caption de los formularios que yo abra mientras uso el programa por ejemplo mientras usaba el sistema use el from1 y el form2 quiero guardar esa informacion en una variable para luego guardarla en una tabla todo para llevar el control de los movimientos que pueda hacer un usuario del sistema. GRACIAS
Responder Con Cita
  #2  
Antiguo 21-09-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

EL objeto screen guarda la lista de formularios abiertos en la aplicacion. Puedes acceder a ellos con la propiedad Forms.


Espero sea util

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 21-09-2017
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Hola caminante. cierto puedo obtener el nombre. Pero mi pregunta es como guardo, no el nombre de uno si no de todos los formularios que haya abierto mientras usaba el sistema. Gracias
Responder Con Cita
  #4  
Antiguo 21-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Fijate si esta idea te sirve de base, consiste en crear una unidad que se deberá incluir en todos los formularios:
Código Delphi [-]
unit uSaveForm;

interface

uses SysUtils, Classes;

procedure SaveOpenForm(const FormName: string);

implementation

procedure SaveOpenForm(const FormName: string);
const
  FNAME = 'OpenForms.txt';  // nombre de archivo en que se guarda la actividad
var
  TS: TStrings;
begin
  TS := TStringList.Create;
  try
    if FileExists(FNAME) then
      TS.LoadFromFile(FNAME);
    TS.Add(FormName + ' - ' + FormatDateTime('dd/mm/yyyy hh:mm:ss',Now));
    TS.SaveToFile(FNAME);
  finally
    TS.Free;
  end;
end;

end.
El procedimiento SaveOpenForm guardará el nombre del formulario mas la fecha y hora en que se realizó la acción.

Luego deberás llamar al procedimiento en el evento OnShow de cada formulario, ejemplo:
Código Delphi [-]
...

implementation 

uses ..., uSaveForm;

procedure TCualquierForm.FormShow(Sender: TObject);
begin
  SaveOpenForm(Self.Name);
  ...
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 22-09-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Una alternativa, si no quieres modificar TODOS los formularios de la aplicación para añadirles código, como ha indicado [ecfisa], por ejemplo porque tu aplicación tiene 200 formularios, es realizar un hook sobre el mensaje de creación de ventanas.

En este código de Rodrigo, por ejemplo, se instala el gancho utilizando WH_CBT.

Siguiendo esa misma idea, puedes colocar en el formulario principal el siguiente código:

Código Delphi [-]
// Obtener el nombre de la clase
function GetWindowClassName(Handle: THandle): String;
var
  Buffer: array[0..MAX_PATH] of WideChar;
begin
  GetClassName(Handle, @Buffer, MAX_PATH);
  Result := String(Buffer);
end;

// Función à la que nos devolverá el hook
function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
  ClassNameBufferSize = 1024;
var
 LHWND : HWND;
 classname:string;
begin
   Result := CallNextHookEx(hhk, nCode, wParam, lParam);
   if nCode<0 then exit;
   if nCode = HCBT_CREATEWND then begin
     LHWND := HWND(wParam);
     if (LHWND>0) then begin
        classname := GetWindowClassName(wParam);
        // Mensaje, Guardarlo en una lista, Base de Datos,...
        OutputDebugString(PChar(FormatDateTime('hh:mm:ss', now) + ' - ' + ClassName));
     end;
   end;
end;

// Inicializar el hook
Procedure InitHook();
begin
  hhk := SetWindowsHookEx(WH_CBT, @CBT_FUNC, hInstance, GetCurrentThreadId);
  if hhk=0 then RaiseLastOSError;
end;

// Finilizar el hook
Procedure FinHook();
begin
  if (hhk <> 0) then
    UnhookWindowsHookEx(hhk);
end;


initialization
  InitHook();
finalization
  FinHook();

Cuando se creea el fomrulario principal se crea el hook. Y cada vez que se crea un formulario se llamará a la función CBT_FUNC.
Ahi se hacen unas comprobaciones y se accede a la clase del formulario.

El resultado en este ejemplo se visualiza en los eventos utilizando OutputDebugString. Para visualizarlos puedes usar la ventana "Event Log" desde el IDE o alguna herramienta tipo DebugView, si ejecutas desde fuera.

Si desde tu aplicación abres estos formularios:


Deberías ver un Log como este:

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 25-09-2017
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
Question Undeclared identifier: 'hhk'

Hola gente muchas gracias por todas sus respuestas tanto eficasa como a neftali. Por mi parte logre hacerlo pero creo que de una manera quizas para ustedes un poco tonta jaja solo use un listbox e hice que al abrir un form agregara el nombre del formulario a listbox luego solo recorro el listbox y obtengo todos los formularios que abri y guardo eso en mi tabla con hora, fecha y el usuario que hizo esos movimientos. no se como les parezca eso a ustedes que tienen mas experiencia y conocimiento . Bueno dirigiendome a neftali, estoy probando tu ejm pero me da el siguiente error [dcc32 Error] E2003 Undeclared identifier: 'hhk'. mi pregunta hnk es una variable que tengo que agregar? y si es asi de que tipo. nuevamente gracias.
Responder Con Cita
  #7  
Antiguo 25-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si, es una variable, agrega estas líneas:
Código Delphi [-]
...

implementation

...

var                    // <- 
  hhk: HHOOK = 0;      // <-
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 26-09-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Rc96 Ver Mensaje
...estoy probando tu ejm pero me da el siguiente error [dcc32 Error] E2003 Undeclared identifier: 'hhk'. mi pregunta hnk es una variable que tengo que agregar? y si es asi de que tipo. nuevamente gracias.
Es una variable. Me dejé de añadirla al ejemplo.

Cita:
Empezado por ecfisa Ver Mensaje
var // <- hhk: HHOOK = 0; // <-

+1.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 26-09-2017
Rc96 Rc96 is offline
Miembro
 
Registrado: ago 2017
Posts: 75
Poder: 7
Rc96 Va por buen camino
muchas gracias ecfisa y neftali!! probare el ejemplo de ambos nunca esta de mas el conocimiento.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿ Cómo saber si un popup está abierto ? LDD Varios 1 17-04-2016 20:08:26
ClientdataSet como saber si esta abierto? Coco_jac Varios 4 13-04-2012 20:36:43
Como saber si un fichero está abierto RaulChemical API de Windows 13 30-12-2008 18:31:42
Saber si un puerto esta abierto Besto Varios 12 10-10-2007 17:30:00
Saber si esta abierto un documento Word Investment Servers 2 13-05-2004 13:02:26


La franja horaria es GMT +2. Ahora son las 16:53:33.


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
Copyright 1996-2007 Club Delphi