Newsgroup: it.comp.lang.delphi
Titolo: Docking form

Salve,
sto scrivendo un programma con varie docking form. Alcune di esse 
contengono enormi alberi di cataloghi, percui il caricamento dura un 
pochino.
Ho bisogno di suggerimenti sul modo migliore per gestire queste docking 
form, ovvero:
- quando creare le form? Subito con il caricamento del programma e 
tenerle dopo nascoste o crearle al momento del bisogno?
- cosa fare con le form quando non servono piu` (temporanemante forse) 
semplicemente nasconderle o distruggerle?
- e infine forse un po' banale ma qual'e` il modo migliore per gestire i 
puntatori alle form per le varie operazioni su di esse (creazione, 
show,hide, distruzione, riferimenti ecc)? una dichiarazione per ogni 
form all'interno della form madre o una lista di puntatori alle varie 
form o dei "campi" di un DataModule.
Ho un conflitto di interessi fra tempo di caricamento delle form e 
utilizzo delle risorse mantenedno in memoria tutti i cataloghi...
Grazie
Enrico

Giusto x chiarire, quando dici "enormi alberi di cataloghi" itendi
dire che hai delle treeview
che mostrano qualche terabyte di dati o cosa?
A.

Alberto Salvati pisze:

terabyte forse no ma qualche mega di dati si. Quindi caricare tutti i 
dati e inizializzare gli alberi ogni volta che si vuole mostrare 
l'albero non mi sembra la soluzione migliore. Uso VirtualStringTree per 
gli alberi
Enrico

 Uso VirtualStringTree per gli alberi
Ottima scelta. ;-)
Quel controllo è un vero spettacolo! :-)
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

enrico, non voglio  fare l'inquisitore, ma senza alc dettaglio in piu,
è molto difficile darti qualche dritta...
A.

 tenerle dopo nascoste o crearle al momento del bisogno?
[CUT]
Io sgancerei completamente le form dal controllo VirtualStringTree, per 
cui creerei una classe thread in cui istanziare il controllo e gestirne 
il popolamento, magari usando i tempi di latenza di uno splash form, 
cicli idle ecc..
A quel punto puoi agganciare il puntatore al controllo esposto dalla 
classe thread ad uno dello stesso tipo nella form gestendone la 
visualizzazione. Diventa, quindi, poco rilevante la creazione delle form 
che diverrebbero molto più leggere ma occorre, tuttavia, prestare più 
attenzione agli oggetti istanziati per evitare le violazioni di accesso.
Per una soluzione più facilmente riutilizzabile potresti dare uno 
sguardo al pattern Mediator che ti consente di sganciare le form dagli 
oggetti di tipo VirtualStringTree esposti dai thread triangolando grazie 
ad una classe mediatrice.

 A.
Fai conto di disegnare l'IDE di Delphi, pero` ad esempio invece dell' 
object inspector carichi in quella form un catalogo diciamo i codici 
postali italiani (scrivo un programma in polacco per questo non cito 
esattamente cosa contiene perche` sarebbe inconprensibile per i piu` :) 
), in un altra form invece carichi solo es. le regioni italiane e cosi` via.
Queste form servono come supporto per lavorare con la form centrale che 
contiene qualche decina/centinaia di campi da riempire.
Se hai bisogno di piu` chiarimenti dimmi cosa ti serve...
L'idea del programma non e` difficile. Il problema e` l' UI che deve 
essere quanto piu` user friendly possibile
Enrico

 ad una classe mediatrice.
Non penso di aver bisogno di un thread a parte per qualche form da 
creare e distruggere.
Con i pattern ci ho provato qualche volta ma non andiamo molto d'accordo :)
Per ora sono arrivato a una soluzione di mezzo che sacrifica 
l'uniformita` ma statisticamente sembra la migliore:
le form con pochi dati che si creano molto velocemente vengono create e 
distrutte all'occorrenza, quelle con cataloghi piu` grandi sono divise 
in due categorie (anche se non sono ancora sicuro) a secondo della 
frequenza di utilizzo. Quelle usate piu` spesso sono tenute in memoria e 
mostrate o nascoste, quelle meno usate sono invece create e distrutte. 
In caso non vada bene cosi posso queste ultime velocemente trasformarle 
in modo da essere tenute in memoria e semplicemente mostrate o nascoste.
Dal punto di vista stilistico non sono molto contento perche` non e` 
elegante :) ma come ottimizzazione non e` male.
Le form sono derivate da una dockform madre ed ognuna e` popolata con 
controlli ad hoc per i dati che deve mostrare. Per ogni form quindi c'e` 
una sola istanza che per ora e` mantenuta in un datamodule.
Una lista di dockform e` piuttosto complicata da mantenere perche` ad 
ogni accesso dovrei verificare che tipo di dockform e`.
Enrico