Am@rcord

Mi è capitato tra le mani un mio vecchio e polveroso disco (mica poi tanto, visto che lo conservo con cura e gelosia).

Vi sono memorizzati programmi storici per l'ufficio (quali WordStar, Word per DOS, Lotus 1-2-3, Excel 2.0); per la grafica (come CorelDraw 2.0); database (come DBIII+); linguaggi di programmazione (antichi come il cucco). Oltre a tante chicche ho trovato una sezione relativa alla mia rivista preferita, alla quale sono abbonato fin dal 1987 e cui, forse più per un interesse puerile che non culturale, sono tuttora abbonato.

La rivista veniva accompagnata da un floppy disk da 720K, e chi voleva poteva contribuire con propri software. Così presi il coraggio a tre, quattro, cinque mani e - messomi d'impegno - realizzai un semplice Master Mind, niente meno che con il foglio di calcolo Lotus 1-2-3 (versione2). Ai meno giovani questo farà sorridere di "nostalgioia"...ai più giovani lascio cercare in internet di cosa sto parlando :o)

Nel numero di marzo del 1990 fece la sua comparsa questo piccolo foglio pieno di macro e animazione. A guardarlo adesso, vien veramente da pensare "che tempi!"... sia per il flusso della macro, che della logica sottostante... ma che volete farci, ero uno sbarbatello (avevo ventidue anni, e vi assicuro che non sono paragonabili ai vent'anni dei ragazzi di oggi, molto più svegli e dritti di me).

Chi vuole, per curiosità o sghignazzismo, può chiedermi senz'altro il foglietto MasterMi.wk1; si apre benissimo anche con Excel, ma non funziona: le macro non girano... non sono "macro" come le intendiamo oggi, cosa pretendevate? OLE? :o)

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)