Newsgroup: it.comp.lang.delphi
Titolo: Applicazione a pagine

Mi sono imbattuto nell'esempio in oggetto di Marco Breveglieri e ho provato 
a fare una piccola applicazione di prova per vedere le possibilita' di 
utilizzo di questo approccio. Mi sono imbattuto subito in un problema che è 
quello dell'assenza, quando si fa il load di una nuova pagina che è una 
frame, di un evento On Create oppure On Show, dove fare alcune solite 
operazioni di inizializzazione, come per esempio l'apertura di dataset. Se 
la frame visualizza ad esempio un dbgrid, questo necessita di un dataset 
aperto. Si potrebbe aprirlo nel form master, ma ci sono frames che 
potrebbero non necessitarne...
Probabilmente qualcuno ci ha ragionato su. Come e' meglio fare ? 
 

 frame, di un evento On Create oppure On Show [...]
 
Definisci un nuovo metodo costruttore per il tuo Frame e inserisci in quella posizione tutto ciò che serve per inizializzarlo.
 
 
type
  TMyFrame = class(TCustomPage)
  public
    constructor Create(AOwner: TComponent); override;
  end;
 
// ...
 
  constructor TMyFrame.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
    // ...qui le tue inizializzazioni...
  end;
 
 
Ciao,
  Marco.
 
-- 
MARCO BREVEGLIERI
#Home: 
http://www.marco.breveglieri.name
 
#Blog: 
http://www.compilaquindiva.net
 

 frame, di un evento On Create oppure On Show [...]
 
Definisci un nuovo metodo costruttore per il tuo Frame e inserisci in quella 
posizione tutto ciò che serve per inizializzarlo.
 
 
type
  TMyFrame = class(TCustomPage)
  public
    constructor Create(AOwner: TComponent); override;
  end;
 
// ...
 
  constructor TMyFrame.Create(AOwner: TComponent);
  begin
    inherited Create(AOwner);
    // ...qui le tue inizializzazioni...
  end;
 
 
Ciao,
  Marco.
 
Eh gia' ! Grazie. Io, per conto mio avevo definito un metodo 'Inizializza', 
vuoto nel frame di base, che si occupava dell'apertura del dataset e altro. 
Il dataset non sapevo se aggiungerlo al master form o al frame di base, poi 
l'ho aggiunto a quest'ultimo pensando che altre frames derivate ne avrebbero 
avuto bisogno. Ho ancora tre problemi concettuali da risolvere:
1) Ogni frame derivata dovrebbe potersi chiudere e l'applicazione tornare ad 
una home page automaticamente alla chiusura.
Per ora ho risolto cosi':
procedure TFrame1.BtnCloseClick(Sender: TObject);
begin
  inherited;
  // Ritorna a caricare la pagina iniziale
  MainForm.PageTreeViewChange(Sender,MainForm.PageTreeView.Items.Item[0]);
  Exit;
end;
2) Ogni frame in chiusura dovrebbe poter chiudere il dataset (o i dataset), 
perche' l'utente potrebbe decidere di abbandonare il lavoro in qualsiasi 
momento..
3) Vorrei che da una frame si potesse richiamare direttamente un'altra 
frame. Poichè è il master form che fa il load della pagina, questo problema 
non l'ho ancora risolto e ci devo pensare. Se hai un'idea ... 
 

 non l'ho ancora risolto e ci devo pensare. Se hai un'idea ...
 
Si può utilizzare lo stesso meccanismo indicato per il punto 1).


 
Fai eseguire al thread dell'applicazione (oggetto *Application*) - 
sfruttando un messaggio con relativa costante o altro mezzo analogo - la 
chiusura della pagina corrente e l'apertura di quella predefinita.
Ciao,
  Marco.
 
Scusa, questo e' al di la' della mia comprensione. Puoi esemplificare ?
(Il mio trucco, vedi messaggio precedente, di provocare il load di un'altra 
pagina sfruttando l'OnChange del PageTreeView funziona apparentemente, anche 
se non fa il free delle pagine caricate. Ma capisco che e' solo un trucco 
non sapendo fare altro).