Newsgroup: it.comp.lang.delphi
Titolo: Frame, anchor e align

Ciao
Ho un problema con i Frame.
Sto facendo un uso massiccio di frame nella mia applicazione.
Nei vari frame, come al solito, ho vari componenti fra cui panelli,
edit e griglie con vari ancoraggi e alineamenti (anchor ed align).
Il problema è che se uso un frame in un form e non rispetto
le sue dimensioni originali, assegnate in fase di design
del frame stesso, quando mando in play il mio progetto
gli ancoraggi e gli allineamenti funzionano ma con 
dimensioni sbagliate di partenza dei componenti su cui sono definiti.
Questo non credo sia un funzionamento corretto, soprattutto viste
le diverse interfacce in cui uno stesso frame potrebbe essere riutilizzato.
qualcuno ha già risolto questo problema o saprebbe dirmi la procedura
corretta di assegnazione di ancoraggi ed allineamenti
per far si che ciò che ho rilevato non succeda?
	Ciao
	MassimoB


    Via De Gasperi, 14 - 42019
    Scandiano (Reggio Emilia)

diverso da quello in cui lavoro io.
cerco di spiegarmi meglio con un esempio semplice ...
creo un frame con una serie di Edit ancorati Left,Top,Rigth
il maniera tale che si allarghino con le dimensioni del frame.
Supponiamo che le dimensioni di questo frame in fase di 
design sono impostate a 300x400
poi uso questo frame in un panel impostando la prop align del frame
nel pannello ad alClient ... impostando questa proprietà il frame
assume le dimensioni del panel che sono per es. 150X400
quello che succede se non tocco nient'altro e che il frame nel form
assume le giuste dimensioni ma i controlli edit al suo interno
partono comunque dalle dimensioni che avevano nel frame
300X400, gli ancoraggi comunque funzionano correttamente.
E' come se all'avvio dell'appl ridimensiona il frame alle giuste dimensioni 
e POI applica gli ancoraggi sulle nuove dimensioni ...
questo succede anche a design time
in più perdo l'allineamento fra anteprima a design 
e applicazione in esecuzione, in quanto ciò che vedo a design
quando mando in play non è rispettatto, addirittura sbaglia in
un modo e con delle dimensioni a Design e in un altro a Run :(
questo e quello che verifico ... il difetto si aggrava se
il frame di partenza lo uso in altri frame che uso nei vari forms.
tipo:
1 Frame1 con degli edit, dentro 1 Frame2 di ricerca con una griglia
il quale ha il compito di prelevare i valori dalla griglia e scriverli
negli edit del frame1, che contiene, ed infine il frame2 di ricerca lo 
posiziono nel form dell'applicazione.
spero di essermi spiegato ... nel caso contrario trovo un ftp e
dò il link per i sorgenti che mi causano questo problema ...
sperando nella tua/vostra pazienza, ovviamente ;)
grazie per il tempo che mi hai dedicato ... :)
P.S.: Ora uso CLX ma in passato ho avuto gli stessi problemi anche
con VCL ... ho anche reinstallato delphi ... ma niente
	Ciao
	MassimoB

 grazie per il tempo che mi hai dedicato ... :)
Prego...serve anche a me ricercare.



Forse dovreste dire quale versione di Delphi usate entrambi.
Il problema lamentato da Massimo esiste, o perlomeno esisteva il D5. In D6 e
D7 non so perche' non ho fatto prove.
Il problema pero' non e' legato solo ai frame, ma al fatto che il
contenitore (frame o form) sia ridimensionato all'avvio in virtu' di un
valore della proprieta' Position che ne modifichi le dimensioni. In quel
caso, i controlli contenuti non modificano le proprie dimensioni a dispetto
degli Anchor, che pero' rimangono attivi e funzionanti.
Ciao,
Stefano

funzionare correttamente?
non credo :S ... spero di aver capito bene la teoria 
di Anchor e Align che tra l'altro hanno un comportamento abbastanza elementare
quanto fondamentale per ottenere velocemente interfacce 
adattabili ai ridimensionamenti dell'utente.
grazie ancora del tuo tempo
P.S. Visto il post di Stefano nel 3ad ti comunico che uso Delphi6
	Ciao
	MassimoB
 

degli Anchor, che pero' rimangono attivi e funzionanti.
grazie per la risposta anche se poco rassicurante, purtroppo.
un'ultima cosa:
in che modo posso evitarlo?
(se la risposta è già presente nella tua ultima frase da me riportata
forse non l'ho capita :( )
	Ciao
	MassimoB


1) crea i frame in runtime ed inseriscili "prima" di impostare la loro
proprieta' Align
2) lascia la proprieta' Position della form che li contiene = a poDesigned e
modifica la sua dimensione in runtime
Altre soluzioni non me ne vengono in mente. Dovrei verificare nei sorgenti
della VCL il perche' di questo comportamento. Se trovo qualcosa ti faccio
sapere.
Ciao,
Stefano

[cut]
si avevo verificato già che assegnando le cose a runtime andava tutto "liscio"
ma ho una maledetta fissa ... <<meno codice scrivo e più sono contento>> ...
ma ora non so come uscirne con la semplice IDE e proprietà design
grazie ancora ...
se trovo una maniera di evitarsi lo "sclero" di avviare tutto a runTime
lo divulgherò sicuramente al NG ...
in realtà quello che mi chiedo è ... 
<<possibile che questo problema lo abbia solo io>>
me tapino!
	Ciao
	MassimoB

 Forse dovreste dire quale versione di Delphi usate entrambi.
Hai "più che pienamente" ragione! :-)
Io uso Delphi 7. Tra l'altro, mi sovviene di aver letto nel libro di
Cantù "Mastering Delphi 7" che il supporto ai frame è nettamente
migliorato, soprattutto per quel che riguarda la compilazione di frame
belli e pronti all'interno di package per poterli registrare,
posizionare sul form dalla Palette e modificarli a piacimento, agendo
anche sui controlli contenuti al loro interno.
E' probabile che tra le altre cose siano state modificate anche le
procedure di gestione di questa curiosa tipologia di controlli, per cui
in Delphi 7 si ottengano risultati migliori (forse, ma comunque diversi)
rispetto alle versioni precedenti dell'ambiente di sviluppo.



Si, probabile, pero' quello segnalato da Massimo e' proprio un bug. In
Delphi 5 ho lavorato ad un'applicazione che faceva uso intensivo dei frame e
avevo questi problemi. Gli anchor dei controlli interni venivano rispettati
ma le dimensioni degli stessi non venivano adattate al frame se le
dimensioni di runtime erano diverse da quelle di designtime. Probabilmente
in Delphi 7 e' stato risolto :-)
Ciao,
Stefano