Scrittura di Shell in VB6.0 (Terza parte)
Andrea Raimondi  rainaple@tin.it

Avvertimento:sebbene nel corso della nostra programmazione useremo anche caratteristiche di VB6 molto del codice potrà girare anche su VB4.0 o VB5.0
Tutto il codice scritto in questo contesto è stato attentamente verificato

Impostazioni del sistema

Dopo aver aggiunto decine di funzionalità alla nostra shell ( orologio, lettore CD, blocco note, sveglia, guida in linea popup per ogni comando ) ci accorgiamo che al nostro amico Piero non serve la sveglia, mentre Marco si lamenta di quanto spazio su disco occupa il lettore CD, mentre Gilberto disprezza ogni aiuto in linea, sicuro che troverà sempre tutto ciò che gli serve
Questo è il primo problema che un programmatore si trova ad affrontare: un problema che tra i banchi di scuola chiamano relativismo psicologico, ma che ai programmatori non porta problemi diversi dall'aggiunta di forms, linee di codice ed altre icone ( se volete aggiungere icone custom al Pannello di Controllo il 2° articolo affronta questo problema, ma a meno che il Pannello di Controllo non sia uno finestra "a tutto schermo" come il Desktop dovete sostituire Screen con frmControlPanel )
A meno che non si abbiano poche impostazioni da modificare ( vedi le opzioni di Wordpad ) si consiglia di creare un Pannello di Controllo in stile Windows, una finestra che presenta tutte le opzioni possibili e cliccando su ogni icona si ottiene un form con le opzioni relative
Ad esempio proviamo a classificare le opzioni di cui i nostri utenti si lamentano:

ORLOGIO e SVEGLIA Impostazioni orario
GUIDA POP-UP Aiuto in linea
LETTORE CD e BLOCCO NOTE Strumenti accessori

Possiamo creare 3 icone, la prima aprirà una finestra per cambiare l'orario e per impostare la sveglia, con anche due opzioni per rimuovere queste funzioni all'avvio
La seconda con una casella per attivare o disattivare la guida Pop-Up ( viene quasi voglia di usare uno spazio nella finestra Strumenti Accessori, ma spesso le Guide in Linea sono tra gli argomenti più problematici )
La terza con una lista di accessori su cui fare doppio click per installarli o rimuoverli, o nel caso si abbiano solo 2 strumenti accessori due Checkbox per attivare o disattivare i 2 tools incriminati
Per impostare un Pannello di Controllo la prima cosa da fare è suddividere le opzioni modificabili in grandi categorie ( Orario, Guida, Accessori ) e poi creare finestre che gestiscano queste opzioni di categoria
Comunque ricordate che "Installazione Guida in Linea" è parte di Strumenti Accessori e non di Aiuto in Linea, questo perchè Aiuto in Linea si deve occupare della gestione della SOLA GUIDA PRESENTE, in caso di guida assente, anzi, l'icona va rimossa dal Pannello di Controllo
Come fare?
If Dir(App.Path & "\guida_in_linea.hlp")="" _ Then Icon_Setup_Help.Visible=False
Ad ogni necessità di cambiamento delle opzioni basta rimuovere Controllo di Impostazione ( Textbox, CommandButton, Check ) e routine associata
Sta poi a noi il lavoro più lungo, noioso e complicato associato ad un Pannello di Controllo:

Formati di file per opzioni

Proprio quel lavoraccio che in Microsoft portò prima ai file .INI e poi al Registro di Configurazione è il calvario di chi ha finito di aggiungere centinaia di funzioni che potrebbero non servire a tutti
3 tipi di standard
Io suggerisco 3 tipi di standard da cui partire

Osserviamo le impostazioni di una sveglia con i 3 formati

Scelta LINUX
030198 1200 #Suonerà alle ore 12:00 del 3 Marzo 1998
Scelta WIN31
[ALARM]
DATE=03/01/98 ;Suonerà il giorno 3 Marzo 1998
TIME=12:00 ; alle ore 12
Scelta WIN95
ROOTKEY
--------SETTINGS
-----------------TIME
----------------------CLOCK
----------------------------DATE=03/01/98
----------------------------TIME=12:00
Se scegliete il 1° formato dovrete implementare codice di I/O differente per ogni file, se scegliete il 2° cercate WritePrivateProfileString() e GetPrivateProfileString() nell'API Reference di VB o su un testo specifico sull'argomento ( io uso Visual Basic 5.0 WIN 32 API, Guida del Programmatore di Dan Appleman edito da Mondadori Informatica )
Se scegliete il 3° formato potete implementare una libreria DLL per l'I/O o usare Jet creando il tutto come un DB DAO ( ho parlato dell'uso di Jet in una precedente serie )

Mettere tutto insieme: un Setup Professionale

Spesso alcuni utenti si potrebbero lamentare di aver completato il Setup del nostro prodotto e trovarsi 100 opzioni da configurare senza alcun aiuto, per questo potremmo dover mettere le mani nel Setup di VB6.0
Esso si trova ( se avete mantenuto le directory di default ) in C:\Programmi\Microsoft Visual Studio\VB98\Wizards98\PDWizard\Setup1
Aprite il progetto Setup1.VBP e aggiungete ogni form che ritenete necessario che l'utente veda durante il Setup
Poi, in Setup1.FRM ponete ogni istruzione form.Show 1 e nel pulsante di congedo del Form alla fine On Error Resume Next : Unload Me
Infine, ricordate che VB6.0 aggiunge al progetto un file di risorse la cui lingua dipende dalla lingua in cui avete comprato VB
Se però volete distribuire in rete una shell scritta con VB6.0 in Italiano non avrà molto successo, dovreste tradurre tutto in Inglese e rimuovere dal Setup ogni istruzione LoadResString(resource_identifier) e sostituirle con la stringa in Inglese
Così avrete un Setup completo con delle opzioni di impostazione della shell e nella lingua da voi voluta
Usate adesso il SetupWizard di VB6.0 e rimuovete il programma di setup ( NON SETUP.EXE, ma quello che di solito si chiama SETUP132.EX_ ) sostituendolo con il vostro nuovo programma di setup, toglietelo dalla sezione Bootstrap del file SETUP.LST e dite all'utente di copiarlo nella directory di Windows ( questioni di Path! )
Fatto!
Il Setup è completo per l'uso
Se volete godervi anche voi il frutto del nostro lavoro in 3 lezioni allora inserite il Disco1 nel drive A:, aprite il Prompt del DOS e scrivete:
C:\WINDOWS>Copy A:\SETUP132.EXE .

C:\WINDOWS>A:\SETUP

C:\WINDOWS>EXIT

Anche per stavolta vi saluto sperando di avervi guidato verso la dimostrazione di quanto sia in realtà serio Microsoft Visual Basic, ricordate di inserire un WritePrivateProfileString() su System.Ini seguendo quanto detto nel primo articolo per attivare la vostra Shell a livello di programmazione
Ciao!