Newsgroup: it.comp.lang.delphi
Titolo: form MDI e frames altro problemino

innanzitutto grazie a marco per l'aiuto, in effetti ora utilizzo con  
successo i frames al posto
delle MDI child
pero' mi si pone questo problema:
nel form principale ho il pulsante salva, che si abilita non appena i dati  
vengono cambiati dall'utente;
ma le interazioni dell'utente avvengono con l'istanza del frama; quindi  
come fa il frame a comunicare alla
form che lo contiene che i dati sono cambiati?
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 form che lo contiene che i dati sono cambiati?
Se lo stato di "salvataggio effettuato" è comune a tutti i Frame, 
potresti introdurre una funzione o una proprietà sulla classe base che 
restituisce True o False a seconda della condizione.
Nel Main Form, sarebbe sufficiente verificare lo stato di questa 
proprietà per determinare se è necessario o meno abilitare l'apposito 
pulsante.
Se fai uso delle azioni e del componente *TActionList*, ancora meglio: 
nell'evento /OnUpdate/ del componente o dell'azione di salvataggio è 
sufficiente impostare la sua proprietà /Enabled/ di conseguenza, 
abilitando/disabilitando le voci di menu e i pulsanti legati all'azione.
In alternativa, potresti rendere accessibile la unit del Main Form alle 
singole unit dei Frame e richiamare un metodo della stessa che reimposti 
il pulsante di conseguenza, oppure ancora accedendo direttamente al 
pulsante.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

lo stato di "salvataggio effettuato" è comune a tutti i Frame e alla form  
principale
per cui mi e' venuta l'idea  di mettere un TTimer sulla form principale
che ogni tot millisecondi controlla tale stato e modifica di conseguenza  
lo stato del pulsante salva.
Funziona benissimo e con una riga di codice risolve il problema!
invece una cosa che con i frame non funziona piu' e' l'intercettazione del  
keyPress
da parte della main form (KeyPreview=true)!!! se qualcuno ha qualche  
suggerimento...
intanto grazie ancora Marco :-)


-- 


 suggerimento...
Per curiosità... a cosa ti serve? Sospetto che sia un altro frangente 
che potrebbe essere egregiamente risolto, ancora una volta, con le 
azioni, al posto di una soluzione più faticosa e confusionaria. ;-)


beh, accetto di buon grado la lavata di capo :-) anche se non ho capito;
cioe' voglio dire so cosa e' l'action manager e le azioni, da quel che ho  
capito
ad es. se ho il pulsante apri file e la corrispondente voce di menu creo  
un'azione 'apri'
e ci collego sia il pulsante che la voce di menu, fin qui ci arrivo; forse  
pero'
non ho compreso appieno la potenzialita' delle azioni.
cmq ti faccio un esempio semplificando al massimo:
progetto composto da:
frmMain
Unit1 contenente la variabile globale "Cliccato"
Frame1 col gestore dell'evento OnClick sul frame stesso che imposta  
Cliccato:=true
istanza di Frame1 sul frmMain
ora mi chiedo: come ***diavolo*** fa frmMain ad accorgersi che si e'  
verificato l'evento OnClick sul frame?
e' vero puo' accedere al valore di Cliccato (essendo globale) ma quando lo  
deve fare?
puoi farmi un esempio con le azioni?


-- 


 puoi farmi un esempio con le azioni?
Aggiungi il componente *TActionList* al form principale (MainForm).
Definisci un'azione che corrisponde al salvataggio e intercetta l'evento 
/OnExecute/ inserendo al suo interno il codice appropriato.
Intercetta l'evento /OnUpdate/ del componente *TActionList* e, al suo 
interno, inserisci l'istruzione che abilita l'azione in base allo stato 
della variabile, o della proprietà o della funzione, a seconda dei casi, 
che determina appunto lo stato che deve avere quell'azione e tutti i 
comandi ad essa associata (pulsanti, voci di menu, ...).
Ad esempio,
   MySaveAction.Enabled := Cliccato;
Lancia il programma e vedrai che tutto funziona così come preventivato. ;-)


grandioso! funziona!
rimane il problema dell'intercettazione dei tasti, prima lo gestivo con  
l'evento KeyDown
del form principale, dopo aver impostato keyPreview:=true.
Adesso non funziona piu'; come faccio a gestirlo con le Action?


-- 


 Adesso non funziona piu'; come faccio a gestirlo con le Action?
Usa la proprietà /ShortCut/ delle singole azioni. ;-)
Ciao!



-- 
