Newsgroup: it.comp.lang.delphi
Titolo: gestione eventi esterni al form

ho un frame che ha una serie di pulsanti, i cui eventi sono su TActionList
la cosa fastidiosa e' questa:
quando creo un nuovo Form, creo dinamicamente il frame che contiene i 
pulsanti
ma devo sempre dichiarare gli eventi nel form e le relative procedure
-- nuovo form
-- evento OnCreate
  //crea ToolBar
  frm_ToolBar := Tfrm_ToolBar.Create(nil);
  frm_ToolBar.Parent := pnl_ToolBar;
  frm_ToolBar.Align := alClient;
  frm_ToolBar.Show;
  //Assegna Eventi ToolBar
  frm_ToolBar.act_ImportaCSV.OnExecute := ImportaCSV;
  frm_ToolBar.act_EsportaCSV.OnExecute := EsportaCSV;
  frm_ToolBar.act_EsportaExcel.OnExecute := EsportaExcel;
  frm_ToolBar.act_Fine.OnExecute := ChiudeForm;
  frm_ToolBar.act_Precedente.OnExecute := Precedente;
  frm_ToolBar.act_Successivo.OnExecute := Successiva;
  frm_ToolBar.act_Inserisce.OnExecute := Inserisce;
  frm_ToolBar.act_Varia.OnExecute := Varia;
non c'e' una via migliore ? 

 non c'e' una via migliore ?
Io penso di non aver capito: "Tfrm_ToolBar" ï¿œ il Frame o il Form? :)
A parte questo, non capisco come mai devi ogni volta assegnare gli 
eventi: ogni Frame racchiude in sï¿œ l'interfaccia grafica (i pulsanti che 
hai inserito) e il codice che risponde alle azioni sui controlli (metodi 
di gestione degli eventi), quindi non ï¿œ chiaro perchï¿œ tu debba 
assegnarli a runtime invece che a designtime, ma forse mi sfugge 
qualcosa dell'architettura che hai creato nella tua applicazione.
Ciao,
   Marco.
-- 
Marco Breveglieri
   (
http://www.marco.breveglieri.name
)

>
la struttura e' questa:
Form - (contiene i vari controlli DBEdit, DbGrd, etc)
Frame - e' una unit separata non integrata nel form
contiene i Pulsanti e gli eventi associati ad ogni pulsante
i due non si vedono a vicenda
solo Form vede Frame (uses frm_ToolBar)
Clicco sul pulsante Varia del Frame, il Form non sa che ho premuto quel
pulsante, per farglielo sapere devo associare l'Evento del Pulsante del
Frame ad una Procedure presente sul Form
frm_ToolBar.act_Varia.OnExecute := Varia;
che sul form sara'
procedure TForm.Varia(Sender: TObject);
begin
 ......il pulsante Varia del Frame mi rimanda qui , dove posso controllare
end;
senza assegnare OnExceute dell'Evento Varia ad una procedure presnete nel
Form l'evento resterebbe confinato sul Frame.
ciao Maurizio

 Form l'evento resterebbe confinato sul Frame.
Ok, credo di aver capito come è organizzata l'architettura.
Mi viene spontaneo chiedere perché utilizzare il Frame se poi, oltre 
alla barra degli strumenti, non contiene altro codice e tutta la 
gestione è demandata al Form: potresti mettere tranquillamente la barra 
degli strumenti nel Form.
Qualora tu avessi Form che devono condividere quella barra, allora tanto 
vale inserirla direttamente nel Form - come si diceva - ed ereditare da 
quest'ultima.
Se la barra contenuta nel Frame svolge operazioni comuni sulle 
interfacce utente che sono esterne ad esso, forse si può prevedere di 
inserire queste ultime all'interno del Frame e "generalizzarle" in 
qualche modo.
Senza ulteriori dettagli mi riesce difficile fornire suggerimenti più 
specifici, ma credo che il problema alla base risieda nel fatto che la 
struttura dell'interfaccia e la sua organizzazione non sia corretta. :|


>
mi hai gi� dato degli spunti interessanti.
grazie ciao Maurizio