Si tratta di Delphi e VCL.C'è un modo semplice per chiamare un metodo in un frame, quando il modulo che lo possiede viene attivato/disattivato?
Ho diversi frame che possono essere utilizzati in più moduli, solitamente creati e aggiunti al modulo in codice. È possibile che un modulo contenga molti di questi frame. Ho bisogno di eseguire del codice in questi frame quando il modulo che lo contiene viene disattivato e invertito quando viene attivato.
TMyFrame.FormActivated;
TMyFrame.FormDeactivated
Una soluzione è quella di avere un gestore di eventi FormActivate/FormDeactivate in quelle forme che richiedono un metodo di telai.
procedure TMyForm.OnActivate(_Sender: TObject);
begin
FFrame1.FormActivated;
FFrame2.FormActivated;
end;
Ecco come ho implementato per ora, ma che ha diversi svantaggi:
- devo implementare questo in ogni forma che contiene un esempio di questi fotogrammi
- La forma deve sapere che alcuni frame hanno bisogno di questa chiamata (accoppiamento stretto)
- I frame devono pubblicare due metodi da chiamare in questi eventi. Preferirei non esporre questi metodi.
Un'altra opzione sarebbe quella di impostare un evento FormActivate/FormDeactivate dall'interno del costruttore del frame. Ma questo significherebbe che nessun altro codice potrebbe essere eseguito in questi eventi e non funzionerà se ci sono molti di questi frame sullo stesso modulo.
Esiste qualche altra opzione che funzioni per qualsiasi modulo che contenga molti di questi frame?
Ho bisogno di questo per Delphi 2007 se questo è importante.
Perché non utilizzare il proprio messaggio personalizzato? Il modulo può utilizzare la lista dei componenti e inviare il messaggio a qualsiasi frame che si trova su di esso, ei frame che devono reagire forniscono un gestore per quel messaggio. Quindi è un metodo semplice sul form ('SendActivationNotification (Activated: Boolean;', forse?) Che esegue il loop e invia il messaggio personalizzato usando wParam per passare l'indicazione booleana dell'attivazione o disattivazione. –
Si può avere il Piggyback su FormActivate/FormDeactivate gli eventi nel costruttore e passate l'evento se impostato da un altro componente –
È possibile scrivere un gestore di eventi OnActiveFormChange per lo schermo, che tiene traccia del modulo attivo (per avere un riferimento al modulo precedentemente attivo) e loop tutti i controlli nella forma attiva e precedentemente attiva per trovare i frame e poi procedere come nel commento di Ken che si occupa dei proiettili rimanenti –