Newsgroup: it.comp.lang.visual-basic
Titolo: ZOrder finestra

Anche se dall'oggetto sembra una domanda facile, mi ha fatto perdere non
poco tempo... inutilmente...
Ho spremuto F1 e MSDN e google ma nulla...
come faccio a far sì che la mia applicazione sia SEMPRE in secondo piano, e
che non venga portata in primo piano neanche quando ci si lavora sopra...
ho provato con SetWindowPos, dove, secondo l'hlp, basterebbe passargli
HWND_BOTTOM, ma (a parte che non sono riuscito a sapere il valore di questa
costante), pur avendo provato tutti i valori, non mi funziona....Grazie a
chi mi dà una dritta....

 ha scritto nel messaggio
news:xhMb8.66018$om6.1...@news1.tin.it...


 In secondo piano rispetto a cosa?
Innanzitutto grazie per la sollecitudine....
In secondo piano rispetto a tutte le altre applicazioni presenti, come se
fosse una specie di "sfondo", fai conto che l'applicazione non fa altro che
mostrare dei dati, ma sempre restando sotto alle altre applicazioni,  in
modo tale che, con le finestre del desktop opportunamente posizionate,
l'utente possa sempre vedere queste info pur lavorando normalmente...
thx....

 ha scritto nel messaggio
news:1BMb8.66051$om6.1...@news1.tin.it...


Scusa se intervengo, Stefano.
Zippo vuole che quella finestra (la sua) resti in secondo piano, non
significa che non è visibile, solo che viene coperta (parzialmente e/o
totalmente) da tutte altre. Personalmente non so rispondere, ma ho la
sensazione che non ci sia soluzione in quanto, se non erro, esiste
un'istruzione che forza al primo piano una finestra, non mi pare che ne
esista una che porta una certa finestra in secondo piano, l'unica (se ho ben
capito) sulla quale Zippo può agire.

 ha scritto nel messaggio
news:HRSb8.11789$8F6.5...@twister2.libero.it...

Perfetto... thx per la precisazione... è esattamente questo quello che
cerco... Non so se esiste un sistema, solo che vedendo la descrizione di
SetWindowPos sembrava che come si può forzare "Always on Top" si potesse
anche fare una cosa del tipo "Always on Bottom"... solo che tutti gli esempi
che trovo di quest'API vengono usati per il primo piano, mai per lo
sfondo... speravo che qualche guru del NG mi sapesse aiutare... io cmq
continuo la ricerca... perchè direi che per la mia app è essenziale... cmq
grazie per l'interesse...

xZippo, posso essere banale?
Windows si chiama cosě perchč gestisce "finestre". Ok, il tuo problema č
chiarissimo, ma, secondo me č un "non problema". Quando l'operatore avvia la
tua procedura la tua finestra č in primo piano, quando avvia un'altra
procedura la sua finestra si sovrappone. Poi, in funzione di dove si clicca,
la finestra di quell'applicativo viene messa in primo piano.
Faccio il curioso: Perchč, a tutti i costi, la tua finestra deve restare in
secondo piano, anche se cliccata? Occhio che se mi rispondi "no, se ci
clicco sopra deve essere messa in primo piano" allora ho ragione io. ;)

 clicco sopra deve essere messa in primo piano" allora ho ragione io. ;)
No, non deve essere messa in primo piano, č proprio quello che voglio
evitare... deve essere cosě perchč l'utente non la deve usare se non una
volta ogni morte di papa, ma contiene perň informazioni utili da avere
sempre sott'occhio, monitorate dal mio prog... o faccio una finestra sempre
in primo piano, che perň disturba chi lavora su altre app (banalmente tipo
word...excel... et similia....) oppure una sempre di sfondo... Spero di
essere stato chiaro... cmq grazie per l'interessamento...

Sei stato chiarissimo e ti propongo una soluzione: Non massimizzare la tua
finestra, ma dimensionala alla dimensione del video (attenzione, è molto
diverso) e lasciale la barra del titolo, i bordi e i controlli di riduzione
a icona, massimizzazione e ripristino. In questo modo potrà essere ridotta,
ripristinata e, persino, trascinata in zona diversa. In pratica lasci
all'operatore che, volutamente o no, ci ha cliccato sopra la possibilità di
spostarla/ridurla a piacere. Non sei d'accordo? Bene/Male. Allora ti chiedo:
Anche ammettendo che la tua finestra sia in secondo piano rispetto a
qualsiasi altra e se uno di quei dati che vengono esposti è casualmente
coperto da un'altra finestra, che può fare l'operatore? Spostare le altre
finestr, magari 20. Dai, nessuno potrà mai criticarti per fare una finestra
come tutte le altre. Molti, invece, potranno criticarti per uan finestra
"anomala". Ciao. Pensaci.

Io credevo di avere risposto, ma proverò ad essere più formale.
Quale condizione desideri:
1) La finestra ha Zorder <> 0 e non è visibile, è completamente coperta
quindi non è consultabile.
2) La finestra ha Zorder <> 0 da codice, oppure è semplicemente inattiva ed
è visibile in parte, perché la finestra con Zorder 0 (oppure attiva) non la
copre completamente.
3) Zorder è ininfluente e le finestre sono state arrangiate sul desktop e
quindi tutte visibili.

 "anomala". Ciao. Pensaci.
Andrebbe bene, se fosse un'applicazione std... purtroppo ciò che devo
realizzare è esattamente l'opposto...
la mia finestra DEVE essere SEMPRE su sfondo... non importa se poi l'utente
si trova incasinato per reperire i dati che stanno dietro... lo so, forse
può sembrare sbagliato, ma è esattamente ciò che vuole il cliente, motivo
per cui non posso che cercare di realizzarlo esattamente così... ti assicuro
che è proprio ciò che vuole, e non c'è verso di proporre cose diverse...

 ha scritto nel messaggio
news:0NTb8.12792$eD3.5...@twister1.libero.it...


La finestra è sempre visibile, sempre massimizzata (o al limite a tutto
schermo senza caption) ed ha Zorder sempre più basso di tutti...
fai conto che è come un active desktop... il pb è evitare che la finestra
venga portata in primo piano...
considera di essere come in una situazione in cui TUTTE le applicazioni
aperte sono "Always on Top" e la mia è l'unica a non averlo....
l'effetto è esattamente quello... spero di essermi fatto capire... grazie
per l'interesse...

OK, il tuo cliente, con tutto il rispetto, mi sembra un po' "fuori".
Io, e non sto scherzando, gli direi che col PC si può far tutto, tranne la
birra e ... le finestre fisse in secondo piano. La notte dormirei comunque.
Ripeto: Non sto scherzando!

 ha scritto nel messaggio
news:PkUb8.12565$8F6.5...@twister2.libero.it...

:-)) Dormirei cmq, ma con un cliente in meno:-))) a parte gli scherzi, la
sua richiesta non è del tutto "fuori"... anche se è sicuramente insolita...
lo scopo del progetto, nella sua totalità, è quello di realizzare (qui mi
lincia se legge questo post...:-) ) una gestione del desktop di windows
"diversa", personalizzata a seconda delle esigenza dell'utente... lo so,
detto così è un pò fumoso, ma è una cosa (credo) sperimentale, che si
sviluppa man mano che si procede e si vedono le possibilità... se poi ne
verrà fuori qualcosa di buono... vedremo...:-)) Io ed altri, ognuno sulla
sua parte, stiamo sviluppando questa cosa, ma affinchè funga da "desktop",
deve essere necessariamente sotto tutti ma ugualmente utilizzabile... (per
dirti quanto sia un progetto insolito, per la gestione del mouse si usa
directinput.... che mi sono dovuto imparare "al volo"...)
Poi se la cosa non è fattibile allora nulla, ma devo cmq provarci... anche
perchè sono pagato lo stesso...:-))))
Ciao e grazie... cmq se vuoi possiamo discuterne approfonditamente... magari
in mail per non finire OT....

Ora capisco meglio e, a questo punto, il problema è ... lecito.
Temo comunque che Bill (anche per non farsi fregare il suo desktop) non
abbia (inavvertitamente? volutamente?) previsto tale possibilità. Se la
trovi fammelo sapere. Sai com'è, uno scherzo a qualche cliente, ogni tanto,
non guasta mai (Non ho detto virus!!! ;) ). Ciao e buona ricerca
(pagata...).

 ha scritto nel messaggio
news:VBUb8.12676$8F6.5...@twister2.libero.it...

La necessità aguzza l'ingegno....:-))) trovato or ora un metodo (da
raffinare ma funzionante...)
    SetWindowPos frmMain.hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE
Sì, lo so, sembra banale.... unico inconveniente è che va eseguita ogni
volta che viene cambiato l'ordine degli zorder... mò ci lavoro sopra... cmq
funziona, provato con un timer e mi tiene sempre il "desktop" sullo
sfondo...
Grazie cmq per l'interessamento... a buon rendere...:-))) Ciao...

 anche fare una cosa del tipo "Always on Bottom"...
No, non funziona :)
Ci avevo già perso tempo io in passato, ma la SetWindowPos() e similari non
riescono a tenere sotto una finestra.
Ti resta però almeno una speranza :)
Da VB funziona, quindi credo anche nel compilato (non ci volevo credere
quando l'ho visto): Se la tua form deve solo fare da "tabellone" metti:
Sub Form_Load()
    Me.Enabled = False
End sub
Magia! la form non risponde più ai click e rimane al suo posto!
A volte le soluzioni stupide e che funzionano sono le più impensate.
Sempre che veramente la tua form non deve rispondere agli input!
Ciao

 Sempre che veramente la tua form non deve rispondere agli input!
L'uovo di colombo... purtroppo però, seppur raramente, la form deve
rispondere... per cui...
ho cmq trovato un tarocco (come dicevo poc'anzi a Lupo) per ottenere ciò che
voglio...dato che all'interno della mia app ho comunque funzioni che ciclano
in continuo per monitoraggi vari, ho inserito una cosa del tipo:
    If GetActiveWindow() = frmMain.hwnd Then
        SetWindowPos frmMain.hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE
    End If
Che, in pratica, me la tiene sempre sotto ma utilizzabile... funziona ed è
un buon compromesso... se poi trovo di meglio....
Ciao e grazie....