Newsgroup: it.comp.lang.visual-basic
Titolo: Ancoraggio delle finestre

Ciao a tutti,
Mi stò divertendo a sviluppare un'applicazione basata su di un form Mdi con
varie finestre figlie gestite da un menu ad albero simile a quello di
Outlook Express. Vorrei ancorare alla sinistra dello schermo questa form con
il controllo ad albero e le forms figlie direttamente alla sua destra,
proprio come accade ad outlook (o addirittura in modo inverso nello stesso
Visual Basic). Il mio problema è che non riesco a creare una routine
efficiente che mi ridimensiona e mi ancora le finestre come accade in
outlook. C'è qualche proprietà delle finestre che non ho considerato? Come
si può gestire in modo professionale un tal tipo di "layout"
Grazie mille!
Ciao,
Damiano Vitulli

 ha scritto

non so se e' un modo 'professionale', comunque puoi ottenerlo mettendo un
picturebox ancorato a sinistra con il treeview che ne occupa completamente
scalewidth e scaleheight.
per i children ti regoli (nell'evento resize) con scalewidth e scaleheight
del form mdi (non mi ricordo mai se devi sottrarre o no la larghezza del
picturebox -- fai qualche prova).
ciao, a.
--
andrea dot palazzi at tin dot it
free vb/sw: 
http://www.comune.modena.it/cittadini/apal/html/


Ok grazie per l'aiuto!!
In effetti adesso il controllo treeview rimane ancorato a sinistra ed il
tutto ha un aspetto molto più professionale.
Però sono ancora in difficoltà : non riesco a trovare il modo di resizare e
di ancorare la picturebox (e il treeview) a run time... qualcuno ha un'idea?
Ciao e grazie ancora,
Damiano

 di ancorare la picturebox (e il treeview) a run time... qualcuno ha
un'idea?
resizare vorrebbe dire ridimensionare ?
come lo dovrei pronunciare ?
ri-sais-are, con la prima s dura e la seconda dolce ?
se prometti di usare l'italiano d'ora in poi, forse riesco a comprendere e
aiutarti.
:)
comunque al sito comune ho mandato uno splitterino.zip che dovrebbe mostrare
come allargare il picturebox contenente il treeview, tipo gestione risorse.
quanto al t.v. stesso, basta che in form_resize gli dici qc come:
left = 0: top = 0
(puoi anche fissarle una per tutte in design)
width=pic1.scalewidth
height=pic1.scaleheight
l'effetto finale dovrebbe essere +- quello di "v" sul mio sito.
ma attenzione che se usi ancora "resizare" il tutto, magicamente, non
funzionera' !



Resizare, io consiglierei di aggiungere questa parola nel vocabolario : )
Resizare = v. tr. (io resizo, tu resizi) 1-cambiare le dimensioni di un
controllo con il mouse durante l'esecuzione del programma (es. Mamma lo sai
che oggi ho resizato il treeview dell'outlook express, sono andato sul bordo
destro del controllo e l'ho ampliato fino a tutta la larghezza dello
schermo, che bello!) 2-verso di un noto animale che ritiene di saper
programmare in VB di nome Damiano della specie dei primati, nella stagione
primaverile questo strano animaletto usa frequentare strane tane chiamate
newsgroup nei quali emette i suoi strani versi .
:)))))
Scusa l'ironia ma, come al solito mi esprimo male. Io intendevo appunto
cambiare le dimensioni del controllo con il mouse durante l'esecuzione del
programma.
Cmq non sono riuscito a trovare splitterino.zip sul tuo sito...
E' possibile impostare su picture la proprieta borderstyle=sizable???
A presto e grazie mille!
Ciao,
Damiano

 E' possibile impostare su picture la proprieta borderstyle=sizable???
i picture boxes *sono* sizable.
ma devi smacchinare un filo con un image per dare un minimo di feedback
all'utente.
con splitterino (sul s.c. c'e' anche splitter.zip, che ho semplificato il
piu' possibile) vedi subito come.
ciao, a.
--
andrea....@tin.it
free vb/sw: 
http://www.comune.modena.it/cittadini/apal/html/


Non ho capito che cosa significa smacchinare un filo...
Ti ringrazio per la disponibilità
Ciao,
Damiano

 Non ho capito che cosa significa smacchinare un filo...
darsi da fare un tantinello :)
(il nostro dizionario si va incrementando :)
ciao, a.

 wrote in message 384f5...@news.megasys.it...

Ciao Pal,
Ho notato la tua curiosa e geniale soluzione (Splitterino.zip) per cambiare
le dimensioni del controllo picture tramite mouse, tuttavia ho riscontrato
una limitazione:
Il procedimento che tu applichi non può essere eseguito su form MDI in
quanto queste ultime non permettono ai controlli picture di avere la
proprieta align = none.
Una soluzione potrebbe essere quella di applicare i tre controlli picture
(picfile,picsplit,picln) sopra un controllo picture più grande il quale è
completamente esteso sulla form mdi. In questo modo però non è possibile
visualizzare i form figli.
A pensarci bene l'unica soluzione potrebbe essere quella di ancorare una
form che contiene un treeview completamente esteso, sulla sinistra della
form MDI.
Siccome non ho trovato alcuna proprietà di VB che mi consente un tal tipo di
funzionalità proverò a creare una routine di ancoraggio via codice.
Che ne dici?
Ciao e grazie mille,
Damiano

 Ciao e grazie mille,
veramente quella soluzione (che non e' mia se non nella semplificazione:
sono partito dall'esempio splitter.zip, sempre sul sito comune, che gestisce
anche la divisione in orizzontale, proprio tipo outlook) io l'ho applicata
in un form mdi, e va tranquilla e beata.
dato che nel post eri partito parlando di outlook, il concetto e'
esattamente quello:
* un form mdi
* a sx un picbox (picfile) con align=left --> prende tutta l'altezza
disponibile (scaleheight)
* dentro il picbox, un treeview (tv) e sotto un filebox (file1), che
occupano meta' per uno scalewidth e scaleheight del picbox. nell'evento
resize del form e conseguente del picbox:
[with mdi]
        Dim fL As Integer, fT As Integer, fW As Integer, fH As Integer
        fW = .picFile.ScaleWidth
        fH = .ScaleHeight \ 2
        .TV.Top = 0
        .TV.Width = fW
        .TV.Height = fH
        .File1.Top = fH
        .File1.Width = fW
        .File1.Height = fH
[end with]
non ho riscontrato nessun problema. questo e' proprio il codice dell'mdi.
se ti preoccupa l'align=none di picsplit e picln, io ho messo picsplit con
align=left (subito a dx quindi di picfile) e picln contenuto in picfile,
quindi senza align.
il problema e' semmai cosa sta nella parte destra dell'mdi.
se ti scarichi "v" dal mio sito, la versione che e' li' ha un form normale
che contiene tre grandi picturebox (immagini, sfondi e settings). funziona,
ma dato che tutti i controlli alla fine stanno in un solo form, non e' il
massimo della pulizia di codice e si rischia di passare il limite di vb, che
se ricordo e' di 64k per form.
quindi ho provato a usare un mdi con tre children: funziona lo stesso, e il
codice viene distribuito molto meglio, ma la gestione diventa decisamente
piu' pesante, i form vengono caricati e ridimensionati molto piu' lentamente
dei picbox corrispondenti.
vedi tu quale soluzione ti risulti piu' pratica. prima di riscrivere tutto a
mano, ci penserei un bel po'. e tieni presente che se un picbox e' pesante e
succhia risorse, non e' che un form sia da meno, tantomeno se poi ci vai lo
stesso a piazzare il picbox dentro.
ciao, a.

 ciao, a.
ho provato anche ad utilizzare (invece del picturebox) una form
(borderstyle=sizable toolwindow) con un treeview incluso.
In questo modo non ho problemi di cambiamento di dimensioni (e ci
mancherebbe solo quello), e va tutto liscio come il mio gatto quando passo
la cera :)
Visto però che utilizzo una form tanto vale dargli anche la facoltà di
muoversi all' interno della MDI...
E qui i problemi insorgono nell'ancoraggio a sinistra durante l'esecuzione
del programma.
Mettiamo il caso che, una volta spostato il form dal suo bell'ancoraggio
effettuato nel form_load, volessi riportarlo nella sua posizione originaria.
Come accade ad esempio con photoshop e la sua bella toolbox, una volta che
la form si trova ad una data x viene automaticamente spostata ed ancorata
automaticamente...
Per effettutare questo io penso che l'unico evento che possa essere
utilizzato è il form_Paint (che "dovrebbe" verificarsi quando il form viene
spostato)
cioè :
Private Sub form_paint()
   If  frmtree.Left < 1000 Then
       frmtree.Top = 0
       frmtree.Left = 0
       frmtree.Height = Screen.Height
       frmtree.Width = 2000
   End If
End Sub
Che però non da risultati egregi: niente feedback, funzionamento: "dipende
da come gli gira"
Speriamo gli gira bene :)
Ciao!

 automaticamente...
a naso lavorerei con left, top, me.hide ecc.
be', in bocca al lupo.
e togli immediatamente la cera dal gatto :)
ciao, a.