27/02/2024 - ziobacco ha scritto:
Principalmente l'applicativo ha una mainform, su questa è posizionato un pannello.
Questo pannello diventa poi il parent di un altro pannello di un altra form.
Pur essendo possibile farlo, mi chiedo qual è il senso di una simile architettura, sia perché vi sono componenti appositamente dedicati per realizzare pezzi di interfaccia (Frame), sia perché il codice preposto a governare una commistione di Form e pannelli di questo tipo non sarà senz'altro ottimale, oltre a essere a rischio di “glitch” dati dal fatto che nascono su due Form diversi e hanno rispetti Owner differenti.
Ma sorvoliamo su questo non essendo il punto centrale del problema (anche se mi permetto di sollevare qualche dubbio e critica). :)
27/02/2024 - ziobacco ha scritto:
Probabilmente mi sono spiegato male ma quello che a me serve sarebbe creare un file di log che logghi qualsiasi cosa l utente scriva da tastiera e soprattutto che logghi i vari click sui componenti, riportando appunto il nome dell oggetto cliccato.
Anche qui, mi sembra strana una simile esigenza, proprio perché in genere quello di cui si tiene traccia è un “call stack” in caso di problemi, oppure il log delle operazioni che vengono fatte a livello “logico”, quindi i “comandi business” eseguiti e che fanno parte della propria implementazione, piuttosto che dell'evento (click o altro) che porta alla loro esecuzione, che è meno rilevante, anche perché alcune azioni possono essere scatenate in diversi modi (posso confermare una dialog cliccando un pulsante, premendo INVIO, chiudendo con la X, premendo ESC, ecc.).
27/02/2024 - ziobacco ha scritto:
Ovviamente mettermi a fare un Onclick su tutti gli oggetti di tutte le form mi diventa improponibile.
Diciamo che qui le cose improponibili iniziano a essere parecchie… :)
27/02/2024 - ziobacco ha scritto:
Ho provato con l oggetto Applicationevent ma pare non funzioni o non sono riuscito a farlo funzionare, per esempio già su un pannello non “prende” il click.
Non hai postato il codice né hai spiegato come usi quel componente, quindi risulta difficile darti una mano in questo senso.
27/02/2024 - ziobacco ha scritto:
qualche consiglio?
Prima di tutto, dovresti dire a che ti serve una cosa del genere. Non perché ci si voglia fare gli affari tuoi, ma perché la necessità guida i possibili suggerimenti riguardo soluzioni che sono probabilmente più efficaci di quella che vuoi mettere in piedi, a cui magari hai pensato inizialmente non valutando altre strade che, architetturalmente, ti risolverebbero la problematica alla radice.
In linea generale, non c'è un modo per loggare automaticamente gli eventi. Vi sono tutt'al più dei componenti, come ApplicationEvents, con i quali puoi intercettare messaggi in generale, ma trattandosi appunto di un sistema “centrale” e generico, i messaggi sono contestualizzati in modo altrettanto generico (ovvero vedi costanti per il tipo di messaggio, un handle per il controllo interessato, ecc. e non vedi “OnClick su Button1”, per intenderci, perché quel contesto viene creato in seguito, nella logica di Delphi che converte il messaggio in coda e lo indirizza al componente e all'evento relativo). Una variante potrebbe essere quella di usare controlli che derivano da quelli standard di Delphi e integrare nel click un log dell'evento.
In conclusione, le soluzioni sono svariate, ma io prima analizzerei qual è il problema che porta a una necessità del genere, che non ho visto da nessuna parte (se non contestualizzata in termini di “metriche” e “analytics”, ma in quel caso non c'entrano i singoli click ma i dati aggregati e presi dalla logica business, ovvero “quante volte stampo una fattura”, ad esempio, e “quanto tempo impiego a generare un report”).
Solo in seguito, penserei alle soluzioni più adatte.