Newsgroup: it.comp.appl.access
Titolo: pannello comandi trasparente

ciao
sonno allettato dall'idea di avere lo sfondo del pannello comandi 
trasparente, visto che ho messo un bellissimo sfondo in Access che è un 
peccato coprire, credete che sia possibile creare una cosa del genere?
ciao 

 ciao
Così come l'hai posta, non è che si capisca proprio un granchè... Il
Pannello comandi è una Form? e il tuo "bellissimo sfondo che è un peccato
coprire"? Dove lo hai messo? Nella stessa form?... in un altra...?
Spiegati meglio.
-- 
Ciao
Pablitomf (Maurizio Facciuti)
------------------------------
http://www.sitocomune.com/
http://www.accessgroup.it/
------------------------------
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Pablitomf (Maurizio Facciuti)
scusa, in effetti sono stato incompleto.
Il mio pannello comandi è la form che Access mi fornisce come maschera 
iniziale sulla quale dispongo pulsanti di comando per accedere a maschere, 
report ecc...
Dal sito comune ho scaricato un DB che con qualche modulo, una maschera e 
una tabella inseriti nel mio DB mi da la possibilità di personalizzare con 
un'immagine lo sfondo grigio di Access. Ho scelto uno sfondo ma il pannello 
comandi, che naturalmente si apre all'avvio, mi si piazza proprio davanti, 
ed essendo un pò grandino mi copre molto dello sfondo. E' per questo che mi 
sono chiesto se era possibile renderne trasparente lo sfondo, come se fosse 
una cornice vuota (lasciando però i pulsanti visibili naturalmente). Che ne 
dici?
grazie


 grazie
La Form di Access si può rendere Trasparente rispetto allo
Sfondo, ma la cosa è decisamente complessa, e se fossi in
te valuterei bene se imbattermi in questo sentiero....!!
Ovviamente è la mia opinione.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 grazie
Dico che ora ho le idee molto più chiare a riguardo.
La mia risposta, come quella di Ale è che si può, ma dovresti avere delle
conoscenze VBA abbastanza elevate. La cosa diverrebbe molto complessa, ne
varrebbe la pena? Io non credo. Fai prima a inserire quello sfondo
bellissimo come sfondo della form.
-- 
Ciao
Pablitomf (Maurizio Facciuti)
------------------------------


 visibili naturalmente). Che ne dici?
Ho provato a convertire in VB quello che uso in C (Windows 2000/Xp), ma non 
sembra collaborare molto, anche perché qui devi modificare lo stile esteso 
della finestra al volo, e fa dei casini allucinanti:
'Da mettere in un modulo qualsiasi
Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hWnd As 
Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As 
Long
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" 
(ByVal hWnd As Long, ByVal nIndex As Long, dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" 
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Const GWL_EXSTYLE As Long = (-20)
Public Const WS_EX_LAYERED As Long = &H80000
Public Const LWA_ALPHA As Long = 2
Public Const LWA_COLORKEY As Long = 1
' Da mettere in Form_Load()
Dim MioLong As Long
MioLong = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
If MioLong = 0 Then
    MsgBox "Fallita lettura stile", vbCritical + vbOKOnly, Err.LastDllError
Else
    MioLong = MioLong Or WS_EX_LAYERED
    If SetWindowLong(Me.hWnd, GWL_EXSTYLE, MioLong) <> 0 Then
        If SetLayeredWindowAttributes(Me.hWnd, 0, 128, LWA_ALPHA) = 0 Then
          MsgBox "Fallita impostazione alpha", vbCritical + vbOKOnly, 
Err.LastDllError
        End If
    Else
        MsgBox "Fallito cambiamento attributi" & Err.Description, vbCritical 
+ vbOKOnly, Err.LastDllError
    End If
End If
Quando imposto il valore Alpha (128 = 50%, ma qualsiasi valore non gli 
piace) ritorna il codice d'errore 87 (parametro errato). Se qualcuno ha 
qualche idea...
IG

 
[CUT]
Da quello che ne sò il problema è a monte.
La costante WS_EX_LAYERED non è supportata dalle funzioni grafiche
di Access.
Access non lavora e non può lavorare in modalità MultiLayer, motivo
per il quale se debugghi
    MioLong = MioLong Or WS_EX_LAYERED
    msgbox SetWindowLong(Me.hWnd, GWL_EXSTYLE, MioLong)
 
Ritorna sempre ZERO.
Io a suo tempo ho risolto in un'altro modo, ti spiego sinteticamente
la tecnica dato che mi pare ti interessino le API.
[UTILIZZO DI QUESTE]
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long,
ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long,
ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As
Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long,
ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Ho scomposto il lavoro in 2 Parti:
1)La parte della Maschera
2)La parte dei Controlli.
Per la Maschera ho generato 2 Regioni, una interno Bordo, l'altra
la dimensione esterna.
Quì devi passare all'API GetWindowRect l'Handle della Form per
ricavare correttamente le coordinate, da cui estrai le dimensioni
delle 2 Aree, tra le quali dovrai fare la differenza, otterrai così
Il BORDO in chiaro e l'interno Trasparente.
Ora hai eliminato anche tutti i Controlli....!! ;-)
Memorizza l'Handle della Regione risultante per dopo.
Ora per ogni controllo nella Form devi fare la stessa cosa
quindi Cicli la Classe Controls e ricavi la Regione passando
le Coordinate dello stesso come relative alla WindowRect di prima.
Ora fai un bell'OR tra la regione del Controllo e quella in trasparenza
di prima, e per magia riappaiono tutti i controlli.
Fondamentale sono le coordinate Rect, e la conversione Twips-->Pixel
per la corretta posizione dei Controlli come spostamento relativo.
Buon divertimento...!!
Non sono sadico, ma il Demo che feci qualche anno fà l'ho perso
e no l'ho mai pubblicato in quanto la ritengo poco utile.
In ogni caso alcuni esempi dell'Uso delle Regioni li trovi nel mio
sito nel DEMO:
Sezione [API]
   RoundRect(Form Arrotondate)
http://www.mantuanet.it/alessandro.baraldi/
Ciao


 [CUT]
Ho fatto qualche riprova:
Copia ed incolla questo in una Form, e vedine l'effetto.
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal
dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal
hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags
As Long) As Long
Private Sub Form_Load()
     Dim Ret As Long
      Ret = GetWindowLong(Application.hWndAccessApp, GWL_EXSTYLE)
    Ret = Ret Or WS_EX_LAYERED
    SetWindowLong Application.hWndAccessApp, GWL_EXSTYLE, Ret
     SetLayeredWindowAttributes Application.hWndAccessApp, 0, 128,
LWA_ALPHA
End Sub
Come vedi la Finestra di ACCESS supporta la cosa in quanto è generata
da una Classe tipica.
Le Form di Access che si suppone siano SDI in realtà vengono
gestite in modo un pò particolare, come tutti gli oggetti grafici
di Access.
In pratica diventano veri solo quando hanno il Focus, queste
semplificazioni
rendono Access molto veloce, ma graficamente limitato....!
Se trovo qualche cosa di più tecnico te lo dico.
Ciao
@ALex


Ho provato quanto hai postato, e' interessante, funziona.
ciao


 ciao
Io non la trovo interessante, a cosa potrebbe servire
una Form di Access(con figli a seguito) parzialmente/Totalmente
Trasparente..?
In VB č decisamente meglio gestibile.
Ciao
@Alex


 In VB č decisamente meglio gestibile.
Non serve a nulla in ogni caso: non stiamo parlando di giochi...
Ciao.

 wrote in message
news:WD3Hd.9532$
GU.3...@twister1.libero.it

Concordo, ma sai che ognuno puň pitturare i propri lavori
come crede.


 come crede.
Se parliamo di skins grafiche posso essere d'accordo.
Ma non scherziamo con le trasparenze: i programmi devono essere usati, otto
ore al giorno, da utenti che loro malgrado non ci giocano...
Posso consigliare all'amico di:
1) Non usare i pannelli comandi, soluzione preistorica, e affidarsi a barre
dei menů.
2) Oppure inserire i pulsanti del pannello direttamente sullo sfondo grafico
dell'applicazione (i pulsanti potrebbero contenere temi grafici compatibili
con lo sfondo).
Ciao.

 Ciao.
Questa non l'ho capita.
Vuoi dire di creare una Form Massimizzata che faccia da Sfondo
nella quale mettere i Comandi...??
Ciao


 nella quale mettere i Comandi...??
Una form d'avvio con temi grafici già ce l'ha, da quanto scrive...
Perchè non inserire i pulsanti (immagini graficamente coerenti con lo
sfondo) direttamente sopra?
Resta il fatto che i pannelli di comandi sono davvero "antichi": che c'è di
meglio di una barrà dei menù con tutte le opzioni sempre a portata di mouse
(i pannelli comandi vengono sovrapposti dalle forms aperte).
Ciao.

 Ciao.
Vabbè che ci facciamo lo obblighiamo...?
Se si potesse io sarei il primo....! ;-)


 Ritorna sempre ZERO.
E' qui che ho preso una fregatura: In vba NON mi ritorna 0, va avanti e poi 
da parametro errato sulla SetLayeredWindowAttributes, dove con questo 
immagino si intenda l'hwnd che fa riferimento a una finestra non layered e 
non come pensavo io al valore di trasparenza. Per pura curiosità ho creato 
una micro dll in C da richiamare in VB che facesse le stesse cose con una 
funzione che prendeva come solo parametro l'HWND e qui sì che SetWindowLong 
ritorna sempre 0 con le mdichild di Access!!!
IG

 IG
In VB funziona perfettamente sulle Form in quanto ogni
form è una MDI sulle Child come giustamente hai intuito
la cosa è analoga ad Access...!
Porteremo pazienza anche su questa menomazione.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Sono ansioso di vedere (se mai ci sarà) un Office .Net: li non potranno 
barare più di tanto, se un form sarà derivato da System.Windows.Forms.Form 
dovrò poterci fare almeno tutto quello che faccio con un Form, Opacity per 
la trasparenza (al di la dell'utilità) inclusa! O ci beccheremo 
Office.Access.Form, ipotetica versione specifica monca!?! :-)
IG

 ha scritto nel messaggio
news:57sHd.91908$C94....@tornado.fastwebnet.it...

La tua considerazione mi farebbe felice, io che praticamente uso solo
le API sarei a nozze senza più limitazioni di HWND dei controlli solo
se hanno il Focus, piuttosto che non avere un HDC, e dovermene creare
uno fittizio magari solo per gestire un minimo effetto grafico...!
Dopo, come detto, ognuno ci fà quello che ci vuole, io se non richiesto
non voglio sindacare, posso esprimere solo la mia opinione.
Magari..!!!


 non voglio sindacare, posso esprimere solo la mia opinione.
E' diretta a me quest'affermazione?   :-)
Nessun problema; però non perdere di vista la realtà: le suddette richieste
sono niente più che giochini.
E' più importante che un generatore d'interfacce per DB sia veloce o che
supporti giochetti grafici?
Ciao.

 Ciao.
No Oscar non preoccuparti se fosse rivolta a te come ad altri sarei diretto
non ho nessun problema o vergogna a dire quello che penso, dovresti averlo
capito, era proprio un affermazione fine a se stessa.
Anzi in questo caso sono della tua stessa opinione, tutte cazzate, ma
ripeto, che gli vuoi fare
se uno lo vuole il "GIOCHINO", lo uccidi...?? ZZiiii suoi...! ti pare..?


 se uno lo vuole il "GIOCHINO", lo uccidi...?? ZZiiii suoi...! ti pare..?
Per caritą: rifiuto la violenza!   :-)
Chiaramente se si puņ raggiungere l'obiettivo in maniera lineare, evitando
inutili scampagnate credo sia meglio no?
Non vedo perchč dover rendere un pannello comandi trasparente (per far
risaltare lo sfondo grafico) quando si puņ tranquillamente (secondo me si
*deve*) lavorare su un'unica form che faccia sia da sfondo che da pannello
comandi.
Questa puntualizzazione solo per rimanere nel Th.
Ciao.

 ha scritto nel messaggio 
news:h1OHd.429$5k5....@twister2.libero.it...

Ti dirņ la veritą a me non piace molto la mascheramassimizzata...
Mi mandi la foto di una tua maschera?
Sono curioso
MAssimiliano

 Ciao.
Certo, ed io raccolgo
(Pensavo di essere dispotico io nei miei modi, ma vedo che
ho un'ottima compagnia nel NG, mi sento supportato)


 Sono curioso
Un esempio pubblico di Access Form di grande impatto estetico potrebbe
essere il Task Manager pubblicato da Baraldi sulla sua area.
Non serve un artista per prendere spunto da un'idea del genere e creare un
Pannello comandi (massimizzato l'hai aggiunto tu, io non lo pensavo) bello
graficamente e che
faccia pure da Form d'avvio.
Ciao.

 ho un'ottima compagnia nel NG, mi sento supportato)
Ah, quindi il mio stile ti pare dispotico?  :-)
Ciao.


grazie
---
Daniele 


Se ti interessa ti mando qualcosa di mio
MAssimiliano 


Ebbene si.
Almeno poco democratico visto che
vuoi obbligare, a costo di usare la forza bruta, a piegarsi
al tuo volere, anche se tecnicamente ineccepibile.
P.S. adesso non chiedermi se per "Bruta" fosse riferito a te...!!!!
Giuro che non ti ho mai visto pertanto ogni rif. è casuale.
;-)


 Ciao.
Ho un programmino che realizza SKINS delle quali salvi le impostazioni
e puoi generarne con sfumature differenti mantenendo la disposizione
dei settori dove metterai i controlli, questo agevola in modo notevole
ricrearle per accontentare l'utente finale.
[PIPPA ESTETICA]
In una versione di ARCHIFOTO che non ho mai finito per pigrizia, rifatta
completamente con la gestione LISTVIEW e TREE(API), davo la possibilità
di personalizzare lo SKIN grafico di tutte le maschere su una scelta di 5
tipologie.
La cosa non è importante, ma voleva essere solo un'aggiunta al giochino
della
gestione FOTO.
Se avrò voglia la terminerò.....!


 al tuo volere, anche se tecnicamente ineccepibile.
Ma non voglio proprio obbligare nessuno.
E' solo questione di buonsenso: complicare inutilmente le applicazioni per
ottenere risultati che si possono avere con semplicità ... è la miglior
ricetta per generare problemi.
Ciao.

 MAssimiliano
ma certamente. ecchehaibisogno del permesso? :-)
---
Daniele