Access: il Re è nudo (o almeno trasparente)

Tempo fa avevo sentito il bisogno di ravvivare le mie maschere Access, sempre uguali, smorte, amorfe, piatte: in una parola, tristi. Mi ero tuttavia arenato constatando che, al di là di qualche bella immaginetta di sfondo, più di tanto non si poteva fare; perfino i pulsanti di comando possono contenere soltanto o testo o icona, alternativamente! certo, XP aveva cambiato l'aspetto dei controlli, rendendoli più gradevoli, ma mi rodevo il fegato per le splendide applicazioni che VB consentiva di creare. Ma casualmente, come spesso accade, mi sono imbattuto qualche giorno fa in un gradevole progettino, e voglio qui ora, per chi come me ne sente l'esigenza, condividere una tecnica interessante e semplice per applicare l'effetto di (semi)trasparenza ai controlli e ai report di Access (il progetto è di Maurizio Facciuti di Accessgroup.it). Si tratta di un paio di API e di un semplice accorgimento: rendere la maschera desiderata (o il report) di tipo Popup prima di chiamare la funzioncina che qui vi illustro:

Private Const GWL_EXSTYLE = -20
Private Const LWA_COLORKEY = 1
Private Const LWA_ALPHA = 2
Private Const WS_EX_LAYERED = &H80000

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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal cKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long

Sub RendiTrasparente(hwnd As Long, tVal As Integer)

   Call SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
    Call SetLayeredWindowAttributes(hwnd, 0, (255 * tVal) / 100, LWA_ALPHA)
End Sub

Private Sub Form_Open(Cancel As Integer)

    RendiTrasparente Me.hwnd, 50   '0 del tutto trasparente, 100 opaco
End Sub

Basta incollare questo codice nell'IDE del VBA di Access, nella sezione della Maschera (o del Report: in tal caso occorre modificare opportunamente la Sub che si occupa dell'apertura: Report_Open) desiderati. All'apertura si noterà subito l'effetto di trasparenza impostato nella chiamata (0: del tutto trasparente, 100: del tutto opaco).

Vi sono soltanto alcune cosette da tener presente:

1) non ho testato il codice per revisioni di Access precedenti alla 2002 (Access XP), ma dovrebbe funzionare senza problemi (forse, fino ad Access 2000 compreso, l'oggetto Report non espone la proprietà Popup)

2) i controlli espandibili (combobox, listbox, lo stesso DTPicker), finchè sono contratti restano in trasparenza, ma una volta espansi diventano opachi : o(

3) non ho trovato il modo (forse non si può) di regolare la trasparenza di un singolo controllo all'interno di una maschera. Quindi, o tutti, o nessuno :o)

Le prospettive di implementazione mi sembrano interessanti comunque, pur con queste limitazioni, almeno per solleticare un pochino la fantasia nella costruzione di quegli orrendi Pannelli comandi preimpostati!! :o)

posted @ martedì 23 ottobre 2007 17:44

Print

Comments on this entry:

No comments posted yet.

Your comment:



 (will not be displayed)


 
 
 
Please add 3 and 8 and type the answer here:
 

Live Comment Preview: