Newsgroup: it.comp.lang.delphi
Titolo: Frame da Frame

volendo creare un'applicazione con 1 form + vari frame, che dia
la gestibilita' dei form MDI, ho pensatodi seguire questa strada
1) un Form standard che richiama vari Frame
il problema nasce quando da un Frame ho necessita' di chiamare un
Frame diverso , per visualizzare o scegliere dati
in pratica ho Form1 che chiama Frame1 da Frame1 devo fare una ricerca
e chiamo Frame2 sempre con LoadPage , senza distruggere Frame1
FCurrentPage: TFrameCustom; quando chiamo Frame1 e
FCurrentPage: TFrameRicerca; quando da Frame1 chiamo Frame2, il frame
viene creato e visualizzato
Quando ho eseguito la ricerca da Frame2 , devo distruggerlo  e tornare a
Frame1 , ma non esistendo un metodo close non posso chiudere il Frame,
dovrei portare in superficie Frame1 e da qui chiamare Frame2.destroy
ho provato cosi' :
nella strict private ho dichiarato
FCurrentPage: Tfrm_Ricerca   // nome del frame
quando confermo la ricerca , chiam FreeAndNil(FCurrentPage):;
ma il Frame resta Visibile.
- quando sono in Frame2 posso risalire a chi l'ha chiamato ?
- posso eseguire FreeAndNil
 possibile portare in superficie un Frame ?
come letto nel  post del 1/05 form MDI , si potrebbe aggirare con un Form 
modale,
ma l'uso dei frame diverrebbe inutile.
procedure Tfrm_Base.LoadPage(APageClass: TPageFrameClass);
var Stato:String;
begin
  // Verifica che il riferimento alla "metaclasse" sia valido
  if APageClass = nil then
    Exit;
  // Verifica che la pagina richiesta sia differente da quella attuale
  if FCurrentPage <> nil then
    if FCurrentPage.ClassType = APageClass then
      Exit;
  // Distrugge l'istanza della pagina esistente
  if FCurrentPage <> nil then
    FreeAndNil(FCurrentPage);
  // Crea un'istanza della pagina richiesta
  FCurrentPage := APageClass.Create(Self);
  try
    // Dispone la pagina all'interno del pannello contenitore
    FCurrentPage.Parent := ScrollBox1;
    // Forza la pagina ad occupare lo spazio disponibile
    FCurrentPage.Align := alClient;
  except
    // Distrugge la pagina in caso di errore imprevisto
    FreeAndNil(FCurrentPage);
    // Risolleva l'eccezione per consentire al gestore predefinito
    // di visualizzare il "classico" messaggio
    raise;
  end;
end; 

 modale, ma l'uso dei frame diverrebbe inutile.
Siccome mi riconosco un po' nel codice (e nel problema) ti rispondo. :-)
L'implementazione dell'applicazione suddivisa in pagine ha lo scopo di 
visualizzare, una alla volta, le pagine di cui è costituita 
un'applicazione in base alla selezione operata dall'utente.
Nel tuo caso, si tratta in realtà di costruire uno strato superiore, 
cioè una pila di Frame che devono essere visualizzati in successione, 
pertanto la struttura che stai adoperando non è adatta a questo scopo e 
va interamente rivoluzionata.
Ma prima di analizzare cosa significa fare ciò, vorrei chiarire il 
motivo per cui ritieni che l'uso di un Form modale renderebbe i Frame 
inutili: in fondo, la loro funzione di selezione di una pagina la 
ottengono tranquillamente; se il tuo scopo è visualizzare un'interfaccia 
che, operando alcune scelte e confermandole in qualche modo, torna al 
punto di partenza, allora sembra essere un compito adatto ad un Form 
modale. Il fatto che si faccia uso di Frame non significa che si debbano 
impiegare in qualsiasi contesto, giusto? ;-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)