Newsgroup: it.comp.lang.delphi
Titolo: Salvare il layout di una finestra

In una mia applicazione, oltre a salvare lo stato della finestra
(dimensione, posizione, windowstate), vorrei salvare anche le posizioni e
dimensioni di alcuni componenti (Pannelli, listview) che l'utente può
modificare tramite splitter.
Ho dei problemi però quando devo ripristinare la situazione salvata: se la
finestra è stata chiusa massimizzata, il layout viene tutto sballato:
nonostante il WindowState sia su Maximized, la finestra è più piccola dello
schermo ma è comunque massimizzata (non è possbile fare il resize e il
bottone in alto a destra è quello del ripristino).
Viceversa se è normale, tutto funziona alla perfezione. 
Il codice per il ripristino è nella FormCreate.
Voi come fate?
-- 
Lis
Mercatino: 
http://snurl.com/sito_lis
Aiuta la ricerca contro il cancro: 
http://snurl.com/ida_team

 modificare tramite splitter.
In che modo salvi queste informazioni ?

 In che modo salvi queste informazioni ?
Con delle semplici scritture su un file ini.
Eccone un piccolo estratto:
State=0
Left=91
Top=60
Width=890
Height=648
Panel1 height=170
Panel2 width=230
State è il WindowState e ovviamente se è diverso da normal non leggo la
posizione e dimensione della finestra.
Quei "PanelX ..." invece sono l'altezza di un pannello che può variare di
altezza con uno splitter e la larghezza di un altro pannello sempre
dimensionabile con uno splitter.


http://www.programmazione.it/index.php?entity=earticle&idArticle=254&idPage=435&idArea=1

 
http://www.programmazione.it/index.php?entity=earticle&idArticle=254&idPage=435&idArea=1
Grazie per il link ma cosě mi sembra di usare una ferrari per andare a fare
la spesa.
Il mio problema non č di salvare e ricaricare le informazioni dall'INI (in
questo caso non uso il registry per scelta) ma ripristinare la situazione
corretta nel caso di una finestra massimizzata.
Infatti, se semplicemente ripristino lo stato della finestra senza applicare
le altre impostazioni (larghezza e altezza dei pannelli), la finestra si
massimizza normalmente, altrimenti no, ed č questo che non capisco.


 capisco. 
prova a:
- salvare i bounds della finestra (Top, Left, Width e Heigth) in qualsisasi 
caso (anche se WindowState è wsMaximized o wsMinimized);
- al momento del ripristino, imposta sempre WindowState a wsNormal e con un 
SetBounds riapplica i 4 valori memorizzati.
In questo modo, se la finestra era massimizzata, verrà visualizzata come se 
fosse massimizzata, ma in stato normale. 
Anche se la finestra era ridotta a icona, i valori memorizzati saranno quelli 
del suo stato normale.
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 SetBounds riapplica i 4 valori memorizzati.
Non mi piace: se l'utente la chiude massimizzata devo riaprirla massimizzata
e non pseudo-massimizzata


 massimizzata e non pseudo-massimizzata
però è quello che fa IE6 :-)
Comunque, hai provato a vedere se il modo che ti ho proposto risolve il 
problema?
Se lo risolve, è già un passo avanti (e forse dopo, massimizzando la 
finestra, non si verifica più l'inconveniente che lamenti).
Puoi eventualmente controllare che AutoSize = False e AutoScroll = False e 
provare a usare solo font true-type.


 finestra, non si verifica piů l'inconveniente che lamenti).
Spinto dai tuoi tentativi ho fatto una prova e ho risolto!!!!!
Prima per la lettura delle impostazioni facevo cosě:
- leggevo il windowstate (e lo impostavo alla finestra)
- se il windowstate era normal impostavo i 4 valori (left, top, height,
width)
ora invece facendo:
- leggo e imposto i 4 valori (left, top, height, width), *sempre*
- leggo e imposto il windowstate 
cosě funziona!
se riuscite a spiegarmi perchč, ve ne sarei grato :)
