Utilizzare gli splitter per il resize automatico
Moderator: Enrico Maria Giordano
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Utilizzare gli splitter per il resize automatico
Salve a tutti,
sto facendo un pò di pratica con il comando splitter perché vorrei sostituire alcune dialog con una visualizzazione tipo "outlook" che mi permetta di operare agevolmente a tutte le risoluzioni.
In pratica ho la necessità di avere in nella sezione sinistra un browse e nella destra un folder.
Il mio problema è che in caso di resize mi viene allargata la parte sinistra (folder) mentre vorrei che venga allargata la destra (browse) e precisamente solo la prima colonna del browse.
Vorrei inoltre che lo sfondo della sezione sinistra appaia in grigio (come una dialog); devo creare un oggetto Panel per questo ?
Qualche suggerimento ?
La videata del mio prg di esempio è su www.softwarexp.co.uk/beta/test.png
mentre il prg è scaricabile da www.softwarexp.co.uk/beta/test.zip
Grazie in anticipo.
Marco Turco
sto facendo un pò di pratica con il comando splitter perché vorrei sostituire alcune dialog con una visualizzazione tipo "outlook" che mi permetta di operare agevolmente a tutte le risoluzioni.
In pratica ho la necessità di avere in nella sezione sinistra un browse e nella destra un folder.
Il mio problema è che in caso di resize mi viene allargata la parte sinistra (folder) mentre vorrei che venga allargata la destra (browse) e precisamente solo la prima colonna del browse.
Vorrei inoltre che lo sfondo della sezione sinistra appaia in grigio (come una dialog); devo creare un oggetto Panel per questo ?
Qualche suggerimento ?
La videata del mio prg di esempio è su www.softwarexp.co.uk/beta/test.png
mentre il prg è scaricabile da www.softwarexp.co.uk/beta/test.zip
Grazie in anticipo.
Marco Turco
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Utilizzare gli splitter per il resize automatico
Non so come allargare una colonna del browse ma per il resto modifica così il tuo esempio:Marco Turco wrote:Il mio problema è che in caso di resize mi viene allargata la parte sinistra (folder) mentre vorrei che venga allargata la destra (browse) e precisamente solo la prima colonna del browse.
Code: Select all
ACTIVATE WINDOW oWnd;
ON RESIZE RIDIMENSIONA( oWnd, oSplit, oBrw, oFld )
Code: Select all
STATIC FUNCTION RIDIMENSIONA( oWnd, oSplit, oBrw, oFld )
oSplit:nFirst = oWnd:nWidth() - oSplit:nWidth - 300
oFld:Move( 90, oSplit:nFirst + oSplit:nWidth, , , .T. )
oBrw:Move( 90, 60, oSplit:nFirst - 60, 220, .T. )
oSplit:AdjClient()
RETURN NIL
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Utilizzare gli splitter per il resize automatico
Aggiungi la clausola color al comando DEFINE WINDOW:Marco Turco wrote:Vorrei inoltre che lo sfondo della sezione sinistra appaia in grigio (come una dialog)
Code: Select all
#include "Wcolors.ch"
...
... COLOR NIL, GETSYSCOLOR( COLOR_BTNFACE )
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Grazie EMG,
con le tue indicazioni ho fatto un deciso passo avanti.
Ho modificato il programma in modo tale che cliccando sul pulsante sulla buttonbar si esegue una funzione che crea il browse,il folder e attiva la gestione dello splitter. Tutto più o meno ok. L'unico problema è che ho aggiunto un combobox sul quale opero con il metodo Move che mi hai suggerito ma in caso di resize il programma va in blocco.
Forse il comando move non è supportato per le combobox ?
Inoltre, che funzione posso utilizzare per cambiare lo sfondo quando chiamo la funzione che crea il browse e poi per ripristinarlo uscendo dalla funzione con il pulsante Exit che ho aggiunto ?
Ho aggiornato il prg con le modifiche su www.softwarexp.co.uk/beta/test.zip
Grazie
Marco
con le tue indicazioni ho fatto un deciso passo avanti.
Ho modificato il programma in modo tale che cliccando sul pulsante sulla buttonbar si esegue una funzione che crea il browse,il folder e attiva la gestione dello splitter. Tutto più o meno ok. L'unico problema è che ho aggiunto un combobox sul quale opero con il metodo Move che mi hai suggerito ma in caso di resize il programma va in blocco.
Forse il comando move non è supportato per le combobox ?
Inoltre, che funzione posso utilizzare per cambiare lo sfondo quando chiamo la funzione che crea il browse e poi per ripristinarlo uscendo dalla funzione con il pulsante Exit che ho aggiunto ?
Ho aggiornato il prg con le modifiche su www.softwarexp.co.uk/beta/test.zip
Grazie
Marco
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Il metodo Move() è perfettamente supportato dai Combobox.Marco Turco wrote:Forse il comando move non è supportato per le combobox ?
Il metodo SetColor()Marco Turco wrote:Inoltre, che funzione posso utilizzare per cambiare lo sfondo quando chiamo la funzione che crea il browse e poi per ripristinarlo uscendo dalla funzione con il pulsante Exit che ho aggiunto ?
EMG
comunque nel fsdi2006 allargava o restringeva tab,browse,splitter,menu e quantaltro era nella dialog ma c'erano degli errori iniziali
il problema era che non funzionava bene quando si andava a restringere il tutto a causa di un metodo che non trovava nella classe dialog poi io ho aggiunto questo metodo, probabilmente c'è ma è con un altro nome
Caro Marco, Quando torno a casa ti riporto il codice ...
il problema era che non funzionava bene quando si andava a restringere il tutto a causa di un metodo che non trovava nella classe dialog poi io ho aggiunto questo metodo, probabilmente c'è ma è con un altro nome
Caro Marco, Quando torno a casa ti riporto il codice ...
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
Code: Select all
Function ResizeWndMain()
local aClient
if oApp():oDlg != NIL
aClient := GetClientRect (oApp():oWndMain:hWnd )
oApp():oDlg:SetSize( aClient[4], aClient[3] - oApp():oWndMain:oBar:nHeight - oApp():oWndMain:oMsgBar:nHeight )
// oApp():oDlg:Move(oApp():oDlg:nYMove,)
oApp():oDlg:Refresh()
oApp():oSplit:nLong := oApp():oDlg:nHeight // aClient[4]
oApp():oSplit:Refresh()
oApp():oGrid:SetSize( aClient[4]-oApp():oGrid:nLeft, oApp():oDlg:nHeight - 26 )
oApp():oGrid:Refresh()
oApp():oTab:nTop := oApp():oDlg:nHeight - 26
oApp():oTab:Refresh()
oApp():oWndMain:oMsgBar:Refresh()
// SysRefresh()
endif
return NIL
c'è una finestra principale e dentro c'è una dialog particolare con a sinistra la classe vtaskbar ( menu)
solo questa parte cioè con la vtaskbar non sono riuscito a rimpicciolire mentre gli altri controlli sono a posto
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
oops il comando era
scusate!
Code: Select all
::oWndMain:bResized := {|| ResizeWndMain() }
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Grazie Emg e Silvio. Ho risolto quasi tutti i problemi.
Sto cercando di creare un rettangolo blu con la scritta "Bilancio" ed un'altra scritta più piccola sotto. Vorrei in pratica qualcosa tipo "Posta elettronica" di Outlook (vedi www.softwarexp.co.uk/beta/image2.png ) da inserire sopra il browse ( vedi www.softwarexp.co.uk/beta/image1.png ).
Che funzione mi suggerite di usare per ottenere un risultato tipo "Outlook" ?
Ho provato con il semplice Say indicando le dimensioni da coprire ma non ho l'effetto 3d e vorrei inoltre che il contorno del box blu sia definito da una linea nera come il browse. Non c'è una funzionalità tipo "Box" nelle fivewin ?
Un altro problema che ho è che non riesco a rendere trasparente la bitmap, in pratica mi prende uno sfondo bianco invece che azzurro.
In pratica faccio:
@35,05 BITMAP oBmp FILENAME "48CONS.BMP" PIXEL NOBORDER OF oWnd
oBmp:nClrPane=nRgb(128,128,255)
oBmp:Refresh()
Ma il risultato è che lo sfondo appare sempre bianco come si vede da www.softwarexp.co.uk/image1.png
Qualche idea ?
Marco
Sto cercando di creare un rettangolo blu con la scritta "Bilancio" ed un'altra scritta più piccola sotto. Vorrei in pratica qualcosa tipo "Posta elettronica" di Outlook (vedi www.softwarexp.co.uk/beta/image2.png ) da inserire sopra il browse ( vedi www.softwarexp.co.uk/beta/image1.png ).
Che funzione mi suggerite di usare per ottenere un risultato tipo "Outlook" ?
Ho provato con il semplice Say indicando le dimensioni da coprire ma non ho l'effetto 3d e vorrei inoltre che il contorno del box blu sia definito da una linea nera come il browse. Non c'è una funzionalità tipo "Box" nelle fivewin ?
Un altro problema che ho è che non riesco a rendere trasparente la bitmap, in pratica mi prende uno sfondo bianco invece che azzurro.
In pratica faccio:
@35,05 BITMAP oBmp FILENAME "48CONS.BMP" PIXEL NOBORDER OF oWnd
oBmp:nClrPane=nRgb(128,128,255)
oBmp:Refresh()
Ma il risultato è che lo sfondo appare sempre bianco come si vede da www.softwarexp.co.uk/image1.png
Qualche idea ?
Marco
ci vuole la classe di paco Vtitle oppure se vuoi farlo piu' bello esteticamente la vtaskbar sempre di paco
www.canalfive.com
www.canalfive.com
Best Regards, Saludos
Falconi Silvio
Falconi Silvio
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Non puoi utilizzare semplicemente un bitmap?Marco Turco wrote:Sto cercando di creare un rettangolo blu con la scritta "Bilancio" ed un'altra scritta più piccola sotto. Vorrei in pratica qualcosa tipo "Posta elettronica" di Outlook (vedi www.softwarexp.co.uk/beta/image2.png ) da inserire sopra il browse ( vedi www.softwarexp.co.uk/beta/image1.png ).
Che funzione mi suggerite di usare per ottenere un risultato tipo "Outlook" ?
Prova conMarco Turco wrote:Un altro problema che ho è che non riesco a rendere trasparente la bitmap
Code: Select all
oBmp:lTransparent = .T.
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Ovviamente parlavo solo del colore sfumato. Quello non sgrana. Il testo lo puoi aggiungere durante il paint.Marco Turco wrote:Provo ma temo che sgrani col cambiare della risoluzione.
Ovviamente non è così, avrai fatto qualche errore solo che senza un esempio minimale che lo mostri non posso saperlo.Marco Turco wrote:già fatto ma in questo caso assume come colore di background il nero.
EMG