Newsgroup: it.comp.lang.visual-basic
Titolo: Form Trasparente...

Scusate se è stato piu volto dibattuto questo problema... ma sino ad ora le
soluzioni proposte che ho trovato sui vari siti Web non mi hanno
soddisfatto...: Cerco un modo per implementare un Form Trasparente che meta
in rilievo (cioè visibili) solo gli ogetti che stanno (bottoni, label, menu,
ecc...) nel form, inoltre vorrei che premendo (click del mouse) sulla parte
trasparente del form non si abbia alcun effetto, insomma quello che è
visibile in trasparenza sotto il form deve rimanere visibile ma non
'clicckabile'. Spero di essere stato abbastanza chiaro. Vi Ringrazio!

E' una cosa orribile... ma potresti leggfere i pixel sotto la tua form...
E ridisegnarli... Che ne dici? Mi pare che sul SC ci sia come leggere il
colore di un dato pixel...
            Ciao
                    Allanon

 ha scritto nel messaggio
news:9gv41a$bdfl3$1...@ID-67444.news.dfncis.de...


Non so se si uò fare in VB, se si potesse fare credo che il risultato
sarebbe assai poco performante.
Credo che per quello che vuoi fare,
sarebbe meglio passare a C++.
Io una volta ho creato un OCX in C++, quando
istanzi una classe window, in pratica hai un quadrato, vuoto e trasparente.
Il colore da applicare allo sfondo per riempire la finestra è una cosa che
devi fare tu, insomma credo che una classe Form trasparente da utilizzare
come controllo la si possa fare partendo da qui, ma è un gran lavoraccio...
Implementare tutte le classi, i metodi, gli eventi dei form VB...
Roba da
spararsi...
--------------------------------
Inviato via 
http://usenet.iol.it
 


mah... non si potrebbe prima di visualizzare il form memorizzare l'area che
verrà poi coperta dallo stesso... e impostarla come sfondo del form ? tanto
se non deve essere cliccabile... l'importante è che "sembri" trasparente, se
poi non lo è ma lo sembra... che ce frega ? l'unico inconveniente è se devi
spostare il form... dovresti nasconderlo per un attimo, rileggere lo sfondo
e poi renderlo di nuovo visibile con il nuovo sfondo...
spero di non aver detto cavolate....
ciao,
Marco Trapanese

 'clicckabile'.
Il problema sta tutto qui, ma è insuperabile con semplici chiamate alle API.
Per rendere trasparente un'area di una form si utilizzano una o più chiamate
alla SetWindowRgn, passandogli come parametro la region che la finestra deve
ridisegnare (o non ridisegnare) durante i repaint.
Però le parti della finestra che non vengono disegnate, per il sistema
operativo, non esistono . Sono dei buchi, dove puoi  interagire con quello
che c'è sotto.
Posto quindi che quello che vuoi fare tu non si fa in modo semplice, restano
sempre le via complicate:
1)  Ridisegna sulle parti della form che vuoi fare sembrare "trasparenti"
ciò che sta sotto, e fallo ad intervalli regolari.
2)  Buca la tua form con le region e usa su tutte le finestre aperte (tranne
la tua) la SetWindowLongPtr con Initial State = WS_Disabled, così anche se
la tua form è bucata, quelle sotto sono disabilitate e non accettano i
click, Ricordati di riabilitarle quando esci dal programma.
3)  Buca la tua form con le region e chiama la SetWindowPos con
hWndInsertAfter = HWND_TOPMOST. In questo modo vedrai ancora le altre form
sotto, che saranno cliccabili, ma non verranno mai in primo piano.
Dipende tutto da qual'è l'effettiva esigenza.
Ciao
*Roby*

flash ha scritto nel messaggio ...

Vedi mio OCX adRegn21 sul sito comune 
http://www.it-lang-vb.net/
Ciao