Newsgroup: it.comp.lang.delphi
Titolo: TabSheet o TFrame ???

sto sviluppando un applicazione basata al momento con i Tabbed pages, 
dal menù visualizzo la TabPage che mi serve (nascondendo le altre) e 
ci lavoro su ... sono circa una decina.
ovviamente ho già 2300 linee di codice ed ogni volta è seccante 
trovare poi quello che mi serve (comunque tutto il resto è funzionale 
allo scopo), il problema è solo dover trovare la zona da modificare/
ampliare/editare ... oltre che prima di attivare il form principale mi 
comincia a far passare alcuni secondi (premumo che nel frattempo 
costruisce tutte le Tabbed Pages che verranno successivamente 
visualizzate)
volevo dividere le varie "pagine" in diversi Form in modo da ridurre 
il numero di linee e lavorare su pezzi singoli di codice per volta ... 
un po complicato, ma fattibile, usare varie Unit che poi si 
interfacciano al Form principale, solo che dovrei reindirizzare il 
tutto (parte visuale e procedure)
adesso stavo studiano un po l'utilizzo dei Frame e, mi sembra di aver 
capito, che con pochi passaggi potrei esportare le varie TPage in 
diversi TFrame (copia/incolla della parte visuale e idem per il 
codice .. con aggiustamenti vari) ... sono un tipo che quando capisce 
che si infila in un sacco stretto preferisce rifare tutto da zero 
piuttosto che perdere nottate ad aggiustare e rifinire (... e 
peggiorare) codice già arrivato al punto di incomprensibilità 
dell'autore (che sarei io) :)
ovviamente, a parte lo scopo principale di fare un programma 
funzionante e funzionale, gradirei un programma facile da aggiornare/
ampliare (ecco anche il motivo di dividere i pezzi di codice in 
"sottogruppi") tenendo anche d'occhio le dimensioni dell'eseguibile 
(che a prescindere dal codice mi sembra di aver capito aumento molto 
in base ai "Tool Palette" che inserisco durante il progredire 
dell'applicazione)
consigli ?

 consigli ?
Forse può esserti utile questo articolo (sembra essere proprio il tuo caso):
http://blog.marco.breveglieri.name/index.php?page_id=22
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
     Non hai la possibilità di scaricare Turbo Delphi Explorer?
     Te lo spedisco io!! [
http://blog.marco.breveglieri.name/?p=48
]

grazie,
ero partito proprio dalla lettura del tuo articolo (ovviamente 
capendoci poco dato che non riesco a passare alla fase "pratica" della 
cosa)
comunque dove mi hai indicato ho visto che ci sono anche i sorgenti e, 
sicuramente, mi saranno più utili per capire il tutto
ps. io uso turbodelphi ... dovrebbe funzionare lo stesso come 
principio giusto ?

 principio giusto ?
Certamente, anzi probabilmente l'editing con Turbo Delphi (o una 
versione superiore a D7) risulterà facilitato visto che senza un "layout 
docked" Form e Frame se ne andavano spesso a zonzo di qua e di là. :-)


Ho letto il tuo interessante articolo e mi è venuta una domanda.
la tecnica da te usata con i frame, io la uso a volte direttamente con le 
form (ma solo perchè ho poco in pratica i frame).
Tuttavia, questo, ovviamente parlando di applicazioni non molto complesse e 
che spesso vengono sviluppate senza un grosso lavoro di progettazione a 
monte, dicevo questo tuttavia mi consente di modificare al volo il modo di 
mostrare delle form da "pagina" agganciata all form principale ed incollata 
quindi su un panel, a form mostrata a come dialog in showmodal e viceversa. 
Capita spesso infatti che una form nasce in un modo, poi il cliente chiede 
degli adeguamenti (non ti dicono mai tutto quello che vogliono prima) e la 
form acquista un "peso" e una complessità differente da quelli previsti.
La domanda da inesperto è questa: quali sono i vantaggi di usare dei frame 
rispetto a delle form?
Ad esempio ho notato con le form va un po' a farsi friggere il Keypreview: 
hai due o più form e la sequenza del controllo non è a volte quella attesa.
Ci sono altri incovenienti per i quali vale la pena usare frame al posto di 
form?
-- 
Gianni 

un paio di problemi (ho passato tutto il programma usando questo
formato):
1. come posso fare ad attivare delle procedure all'apertura di un
frame ? (manca l'evento OnShow o similare, l'unico mi sembra essere
OnEnter ma viene attivato solo dopo l'attivazione di qualche object
presente nel frame)
2. come posso fare per "utilizzare" object/procedure/function da un
frame all'altro ? (esempio cambiare il "button1.Enabled := true;" di
un bottone presente su di un frame a seconda dei processi effettuati
da un altro frame)
l'unica cosa che mi viene a mente e utilizzare un qualcosa di
"nascosto" come bottoni e/o procedure ad Hoc presenti nel Main
(esempio: Frame1 chiama procedura presente nel Main che a sua volta
modifica Frame2) ... complicato ma "forse" funziona ... verifico ed
eventualmente mi rispondo da solo.

 da un altro frame)
Devi copiare in ciascun Frame un riferimento al Frame secondario a cui è 
necessario accedere per modificare le proprietà dei controlli.
La soluzione più "pulita" dipende da quale tipo di comunicazione 
dev'essere instaurata e quali sono i motivi e gli scopi finali 
dell'architettura.


 rispetto a delle form?
Semplicemente, eviti di consumare risorse necessarie alla gestione di un 
Form quando, in realtà, non ti servono, poiché un "controllo 
incorporato" qual è il Frame, ad esempio, non ha una barra del titolo da 
gestire e tante altre cose.
Inoltre, potrebbero esserci degli effetti collaterali derivanti dal 
fatto che, benché un "Form incorporato" venga visualizzato 
correttamente, alcune delle funzionalità potrebbero essere influenzate 
dall'utilizzo che se ne fa (come probabilmente avviene nel caso del 
"KeyPreview" che hai citato).
In generale, essendo i *Frame* progettati apposta per rappresentare 
interfacce visuali riutilizzabili, credo sia opportuno utilizzarli come 
tali al posto dei *Form* che, invece, hanno un altro modo di impiego.


 necessario accedere per modificare le proprietà dei controlli.
ho provato inserendo nell' USE il frame secondario ma senza risultati
(medesimi errori)
o parli di altro tipo di "riferimento" ?
scusa le tante domande ma stò solo sbattendo la testa a vuoto :(

//################# PREDEFINITA SHOW
###########################################
procedure TMainForm.FormCreate(Sender: TObject);
begin
  // Carica la pagina iniziale (predefinita)
  LoadPage(THomePageFrame);
end;
//################# CREA HDF
###################################################
procedure TMainForm.MakeHDFfrom1Click(Sender: TObject);
begin
  LoadPage(TMakeHDFPageFrame);
  Exit;
end;
il primo viene attivato dall'evento OnCreate del MainForm ... e qui ci
siamo
il secondo carica i vari frame
ho anche provato ad inserire la chiamata della procedura subito dopo
il LoadPage ma senza risultati (tranne gli errori)

 (medesimi errori) o parli di altro tipo di "riferimento" ?
Parlo di un altro tipo di riferimento. Ciascun Frame è rappresentato da 
una classe; per poter essere utilizzato, è necessario crearne 
un'istanza, "appoggiando" il Frame all'interno di un Form o di un altro 
Frame, oppure creandolo da codice.
Quando l'oggetto viene creato, il riferimento ad esso viene memorizzato 
in una variabile o nel campo di una classe: quello è il riferimento da 
utilizzare.
In sostanza, i Frame che devono essere messi in comunicazione sono 
oggetti, e devono essere muniti del riferimento agli oggetti che 
costituiscono i Frame con cui devono interagire per poterlo fare.
La soluzione più adatta dipende poi dall'architettura che devi realizzare.
Mi devo fermare qui perché la trattazione potrebbe essere molto molto 
più lunga. :-)


    Marco.
probabilmente ripartirò alla carica tra qualche tempo, per il momento
svio il problema facendo eseguire dei controlli ad avvio Frame che mi
abilitano o meno i "bottoni" in base alle variabili trovate (leggasi
file presenti nella main directory)
effettivamente eseguire troppi cambiamenti di stato da un Frame verso
l'altro (ma vale anche per quando usavo i Form) è un po una perdità di
tempo, ricercare e mantenere sempre aggiornati tali controlli ad ogni
cambiamento del codice sorgente diventa anche noioso :)

 delle funzionalità potrebbero essere influenzate
Mi viene in mente che l'anno scorso provai ad utilizzare degli skin: 
funzionavano bene, a meno prorpio del caso in cui incrorporavo una form su 
una formmain: in questo caso non veniva applicato lo skin o veniva applicato 
in modo assurdo (ad. es, nonostante align=alclient, la form incorporata 
appariva con tutto il bordo e i BorderIcons).
Prob. con i frame invece funziona... proverò.
Ciao, Gianni