Newsgroup: it.comp.lang.delphi
Titolo: Frames

Ho un Edit e un pulsante su un frame e voglio che quando viene premuto il 
pulsante, il testo presente nell'edit mi inserito in un altro Edit presente 
su un altro frame. Sono nel frame2 e ho la seguente procedura:
procedure TFrame2.Button1Click(Sender: TObject);
begin
  Frame41.Edit1.Text:=Edit1.Text;
end;
non riesco nemmeno a completare il codice, pare che non riconosca Frame41. 
Ho provato a inserire nella clausola uses la unit in cui si trova il Frame4. 
Ho provato a scrivere Frame4 anzichè Frame41 ma niente. Non ho la più 
pallida idea di quale sia la sintassi per usare all'interno di un frame 
componenti appartenenti ad un altro frame e per la verità non so nemmeno se 
si possa fare. Cosa devo fare?
Grazie 

 Frame41. 
in che sezione di quale unit è definita la variabile Frame41 ?
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)


non sono sicuro di aver capito la domanda.
Ogni volta che creo un frame mi crea una unit nuova in cui č contenuta la 
classe TFrame. Il mio Frame4 si trova nella Unit4, il Frame2 si trova nella 
unit Frame2 ecc... Quando questi frame li inserisco nella Form1 vengono 
creati i componenti Frame21 e Frame41. Di piů non so. 

 end;
la variabile Frame41 dovrebbe essere visibile dal Frame21, cosa di cui 
dubito perchè scommetto che la variabile Frame41 sia nella sezione 
published della classe TForm1 (più esattamente è un campo published).
Il tuo caso si dovrebbe risolvere con un
procedure TFrame2.Button1Click(Sender: TObject);
begin
  Form1.Frame41.Edit1.Text := Edit1.Text;
end;
naturalmente con un
  unit Unit2; {la unit di TFrame2, se non sbaglio}
  interface
  uses
    {..varie..};
  type
    TFrame2 = class(TFrame)
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  implementation
  uses
    Unit1 {la unit di Form1, giusto ?}
Ti faccio notare che:
- "uses Unit1" si mette nella sezione implementation per evitare i 
riferimenti circolari (vedi all'help "circular references" oppure prova a 
metterlo nella clausola uses della sezione interface);
- la scrittura "Form1.Frame41.Edit1..." è possibile perchè Edit1 è un campo 
published di TFrame4
Ciao.


Grazie mille ora funziona.
avevo pensato anche io di mettere Form1 e inserire la unit1 nella clausal 
uses ma mi diceva appunto Circular Unit reference to Unit2 e non sapevo cosa 
volesse dire. 

Io li uso per poter visualizzare all'interno della mia applicazione più 
finestre.
Per esempio: nella form1 c'è un pulsante per visualizzare una tabella e uno 
per inserire dei dati: al click del primo pulsante porto in primo piano il 
frame in cui è contenuta la tabella, al click del secondo pulsante porto in 
primo piano il frame che contiene i componenti per inserire i dati.
Avevo pensato di creare un' applicazione MDI ma mi sembrava meglio usare i 
frames. C'è un altro modo per fare quello che voglio senza usare i Frames? 

 frames. C'è un altro modo per fare quello che voglio senza usare i Frames? 
Non so se può essere utile al tuo caso, ma potresti dare una letta a 
questo "tip":
http://makeashorterlink.com/?P26E52C5B
L'ho scritto io... un po' di pubblicità non guasta, no? ;-)
Nei commenti puoi trovare anche il link per scaricare esempi adatti a 
D2005 e D7.


grazie mille!!!
era proprio quello che cercavo. 

 
http://makeashorterlink.com/?P26E52C5B
Io uso un approccio diverso.
1) Creo il form principale e ci metto un treeview che funzionarà da menu 
ma ci puoi sbizzarrire come vuoi. Al centro ci piazzo un pannello in cui 
verranno caricati via via i frame utilizzati
2) mi faccio un frame per ogni pagina che voglio rappresentare 
(es:clienti, bolle, fatture ecc...)
3) nell form del punto 1, registro le classi dei frame utilizzati (prima 
dell' end.), esempio:
initialization
    RegisterClass(TFrameclienti);
    RegisterClass(TFramebolle);
    RegisterClass(TFramefatture)
end.
4) nello stesso form del punto uno metto questa funzione:
// Procedura di richiamo del Frame
procedure TFormPrincipale.RichiamaFrame(NomeFrame:string);
var
   Frame: TFrame;
   FrameClass: TFrameClass;
begin
Frame := FindComponent (NomeFrame) as TFrame;
if not Assigned(Frame) then
   begin
     FrameClass  := TFrameClass (FindClass('T' + NomeFrame));
     Frame := FrameClass.Create (self);
     Frame.Parent:= FormPrincipale.pannello;
     Frame.Align:=alclient;
     Frame.Visible:=true;
     Frame.Name:=NomeFrame;
   end;
Frame.BringToFront;
end;
5) sull'evento doppio click del mio menu (nel mio caso un treeview) 
richiamo la funzione sopra passando il frame da creare/visualizzare
RichiamaFrame('Frameclienti');
Ciao
Gianni