8
di Francesco Petroni Visual Basic Intermedio Applicazioni 5DI, MDI e Explorer 5tyle Siamo arrivati al terzo di una serie di articoli (cinque o forse più di cinque) dedicati al Visual Basic. Nel primo abbiamo parlato di griglie ed affini (oggetti "visibili" che ospitano insiemi di dati), nel secondo di array e collezioni (elementi "non visibili" che ospitano anch'essi insiemi di dati). In questo terzo articolo parliamo della distribuzione di un'applicazione su più formo Nel prossimo parleremo di inputloutput di file di vario genere (file con dati testuali e file con dati grafici), nel successivo parleremo dei rapporti tra il Visual Basic e i data base, ecc. ecc. Ripetiamo, per chiarire il taglio degli articoli, quanto già detto in una puntata precedente. Si tratta di una serie di articoli dedicati agli utilizzatori del Visual Basic, articoli di "taglio intermedio", pensati per una precisa categoria di utilizzatori, non quelli alle prime armi né quelli già esperti, ma quelli che stanno in mezzo, che hanno già le conoscenze di base e che vogliono approfondire solo alcuni temi particolari. Gli esperti invece già dovrebbero conoscere gli argomenti trattati e quindi dovrebbero anche essere in grado di svolgere facilmente gli esercizi che corredano l'articolo ... ma non è detto. Gji articoli sono prevalentemente pratici, nel senso che propongono una serie di esercizi facilmente rieseguibili da ciascuno di voi. Anche in questo terzo articolo ogni esercizio corrisponde ad una figura che mostra sia il listato sia, in primo piano, il form che costituisce l'aspetto esteriore dell'applicazione. Terza parte Uno, due ... tanti form Una 'semplicissima applicazione Visual Basic potrebbe utilizzare un solo form, che si apre al lancio dell'applicazione e si chiude con il termine della stessa. Se l'applicazione richiede due o più form nasce il problema di come gestirli e quindi di quando e come aprirli e chiu- derli. Prima decisione fondamentale è se utilizzare un'architettura SOl, in cui ogni form va per conto suo, oppure un'archi- tettura MOI, in cui c'è un form che fa da cornice per tutti gli altri form che via via vengono aperti e chiusi. C'è anche la va- riante Explorer Style, in cui assumono molta importanza gli elementi interni al form, che sono solitamente due, un controllo TreeView ed uno ListView. Per ora ci riferiremo alle applicazioni di tipo SOl, in cui i form vivono indipenden- 266 temente gli uni dagli altri. In un'applicazione che prevede più form normalmente esiste uno StartUp form, owero il form che si apre quando si lancia l'applicazione; gli altri form ven- gono via via aperti e chiusi al verificarsi di certi eventi. L'istruzione per far appa- rire un form, supponendo che si chiami Fl, è la seguente: Load F1 , carica ma non visualizza il form F1.Show , metodo che carica, se non già carica- to, il form e comunque lo visualizza Viceversa, per chiuderlo, quando non serve più: UnLoad F1 , scarica il form F1.Hide , metodo che lo nasconde senza scari- carlo E' evidente, dall'esame di queste semplici istruzioni, la differenza tra cari- care e visualizzare un formo Caricare senza ancora visualizzare potrebbe ser- vire per 'guadagnare tempo", scaricare invece di nascondere potrebbe servire per "guadagnare memoria". In realtà neanche i manuali più approfonditi dan- no indicazioni su come conviene com- portarsi nelle varie situazioni, occorre sperimentare e poi decidere. Oltre al caricamento esplicito è possi- bile un caricamento implicito che viene eseguito quando si referenzia un con- trollo di un form non caricato: F2.T1 = "Ciao" Anche se il form'F2, in cui c'è la Text- Box T2, non è caricato, l'istruzione lavo- ra correttamente. Importantissima è la modalità di cari- camento del secondo form, che può es- MCmicrocomputer n. 188 - ottobre 1998

Visual BasicIntermedio Applicazioni 5DI, MDI e Explorer 5tyle · di Francesco Petroni Visual BasicIntermedio Applicazioni 5DI, MDI e Explorer 5tyle Siamo arrivati al terzo di una

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

di Francesco Petroni

Visual Basic IntermedioApplicazioni 5DI, MDI e Explorer 5tyleSiamo arrivati al terzo di una serie di articoli (cinque o forse più di cinque) dedicati al Visual Basic.

Nel primo abbiamo parlato di griglie ed affini (oggetti "visibili" che ospitano insiemi di dati), nel secondo

di array e collezioni (elementi "non visibili" che ospitano anch'essi insiemi di dati). In questo terzo

articolo parliamo della distribuzione di un'applicazione su più formo Nel prossimo parleremo di

inputloutput di file di vario genere (file con dati testuali e file con dati grafici), nel successivo parleremo

dei rapporti tra il Visual Basic e i data base, ecc. ecc.

Ripetiamo, per chiarire il taglio degli articoli, quanto già detto in una puntata precedente. Si tratta di una

serie di articoli dedicati agli utilizzatori del Visual Basic, articoli di "taglio intermedio", pensati per una

precisa categoria di utilizzatori, non quelli alle prime armi né quelli già esperti, ma quelli che stanno in

mezzo, che hanno già le conoscenze di base e che vogliono approfondire solo alcuni temi particolari.

Gli esperti invece già dovrebbero conoscere gli argomenti trattati e quindi dovrebbero anche essere in

grado di svolgere facilmente gli esercizi che corredano l'articolo ... ma non è detto.

Gji articoli sono prevalentemente pratici, nel senso che propongono una serie di esercizi facilmente

rieseguibili da ciascuno di voi. Anche in questo terzo articolo ogni esercizio corrisponde ad una figura

che mostra sia il listato sia, in primo piano, il form che costituisce l'aspetto esteriore dell'applicazione.

Terza parte

Uno, due ... tanti formUna 'semplicissima applicazione Visual

Basic potrebbe utilizzare un solo form,che si apre al lancio dell'applicazione e sichiude con il termine della stessa.

Se l'applicazione richiede due o piùform nasce il problema di come gestirlie quindi di quando e come aprirli e chiu-derli.

Prima decisione fondamentale è seutilizzare un'architettura SOl, in cui ogniform va per conto suo, oppure un'archi-tettura MOI, in cui c'è un form che fa dacornice per tutti gli altri form che via viavengono aperti e chiusi. C'è anche la va-riante Explorer Style, in cui assumonomolta importanza gli elementi interni alform, che sono solitamente due, uncontrollo TreeView ed uno ListView.

Per ora ci riferiremo alle applicazioni ditipo SOl, in cui i form vivono indipenden-

266

temente gli uni dagli altri.In un'applicazione che prevede più

form normalmente esiste uno StartUpform, owero il form che si apre quandosi lancia l'applicazione; gli altri form ven-gono via via aperti e chiusi al verificarsidi certi eventi. L'istruzione per far appa-rire un form, supponendo che si chiamiFl, è la seguente:Load F1

, carica ma non visualizza il formF1.Show

, metodo che carica, se non già carica-to, il form e comunque lo visualizza

Viceversa, per chiuderlo, quando nonserve più:UnLoad F1

, scarica il formF1.Hide

, metodo che lo nasconde senza scari-carlo

E' evidente, dall'esame di questesemplici istruzioni, la differenza tra cari-care e visualizzare un formo Caricaresenza ancora visualizzare potrebbe ser-vire per 'guadagnare tempo", scaricareinvece di nascondere potrebbe servireper "guadagnare memoria". In realtàneanche i manuali più approfonditi dan-no indicazioni su come conviene com-portarsi nelle varie situazioni, occorresperimentare e poi decidere.

Oltre al caricamento esplicito è possi-bile un caricamento implicito che vieneeseguito quando si referenzia un con-trollo di un form non caricato:F2.T1 = "Ciao"

Anche se il form'F2, in cui c'è la Text-Box T2, non è caricato, l'istruzione lavo-ra correttamente.

Importantissima è la modalità di cari-camento del secondo form, che può es-

MCmicrocomputer n. 188 - ottobre 1998

1.37-- -

F-. ••••.•• 8._.l-.xF•..••••••l.eob.BcD--

<todt

__ <1---_ ..""_....-

form che presenta un calendario (control-lo Calendar.Ocx) che facilita l'operazionein quanto mostra anni, mesi, giorni dellasettimana, e che permette di c1iccare an-ziché digitare. Discorso pressoché analo-go anche per la digitazione di una città dascegliere in una lista (controllo ListBox).L'unica difficoltà, in un'applicazione cheusa finestre d'appoggio, è quella di "az-zeccare" gli eventi più idonei all'aperturae alla chiusura dei form d'appoggio.

"__ ah---

__ o

LGoUp-

Figura 2 - Visual Basic5. O - A proposito diautocomposizione.Usare una proceduradi autocomposizione,che risolve owiamen-te solo problemi ge-nerali, per realizzareuna propria applica-zione, che invece de-ve risolvere problemiparticolari, sembre-rebbe una contraddi-zione. Invece la pro-cedura di autocompo-sizione di Visual Basic5. O produce form 'fi-niti' di vario tipo, pienidi oggetti (menu,toolbar, griglie, brow-ser per Internet, ecc.)e con il codice, creatoautomaticamente, ne-cessario al suo fun-zionamento. " pro-grammatore deve solo adattare il 'materiale' prodotto dal wizard alle proprie particolari necessità, mo-dificare oppure inserire il proprio codice al posto dei 'segnaposto' lasciati e segnalati dalla proceduraautomatiCa. Qui vediamo il risultato di una procedura di autocomposizione incaricata di produrreun 'applicazione Explorer Style.

Figura l -Visual Basic5.0 - SOl, MOio Ex-plorer 5tyle.Non solo chiunqueprogrammi con unqualsiasi strumentoche consenta di svi-luppare applicazioniper Windows, ma an-che chiunque sia unsemplice utilizzatoredi Windows dovrebbeconoscere le varie ti-pologie possibili per leapplicazioni Windows.SOl, quella con più fi-nestre indipendenti,MOI. in cui tutte le fi-nestre vivono all'inter-no di un form/finestraMOI, la 'madre di tut-te le finestre', chesvolge il compito dicornice. L 'ultima mo-da è la finestra Explo-rer 5tyle (adottata ora anche dal sistema di help di Windows 98), con un controllo TreeView a sinistraed un controllo ListView a destra. Se si lancia l'autocomposizione delle applicazioni di Visual Basic 5.0la prima domanda riguarda proprio il tipo di applicazione desiderata e la scelta è tra le tre citate.

ProgressBar, che si ottiene impostando-ne la proprietà Value, è ottenuto da uncontrollo timer che ogni secondo incre-menta un contatore. L'avanzamento du-ra 15 secondi, dopo di che ricomincia.

Il secondo esercizio, documentato dallafigura 4, mostra un paio di form che facili-tano la digitazione di quattro campi pre-senti in un form principale. In sostanzaquando nel form principale si attiva uncampo in cui digitare una data appare un

Sono istruzioni che funzionano sem-pre, da qualsiasi routine di qualsiasiform siano richiamati.

Se il passaggio dei dati tra form avvie-ne attraverso variabili, occorre dichiarar-le in un modulo BAS.Sub C1_ClickO 'sul primo form

X=123F2.Show

End Sub

Sub F2_LoadOT1 =X

, restituisce 123 se X è stata dichia-rata nel modulo BAS, altrimenti O

End Sub

Global X, dichiarazione da inserire nel moduloBAS

Oppure, nel secondo caso:F2.Show O

, form modeless: il programma non siblocca

MsgBox "Sbloccato", istruzione eseguita immediatamente

Quindi un form modale obbliga l'utiliz-zatore a terminare le operazioni sul formstesso senza poter "c1iccare" su elemen-ti esterni, come altri form della stessaapplicazione.

Altro problema tipico del lavoro conpiù form consiste nelle modalità di pas-saggio dati da un form ad un altro. Sipossono sempre, come appena detto,referenziare controlli presenti anche inform non caricati o non visualizzati:F1.T1 = "Buongiorno"F2.T1 = "Buonanotte"

sere moda/ oppure mode/esso Nel primocaso il programma si blocca (non vengo-no eseguite le istruzioni successive, nési può passare agli altri form) fin quandonon viene chiuso il secondo form:F2.Show 1

, form modal: il programma si bloccaMsgBox "Sbloccato"

, istruzione eseguita quando F2 vienechiuso

I nostri primi eserciziMettiamo subito a frutto quanto teo-

rizzato fino ad ora realizzando tre sempli-ci esercizi.

Il primo è documentato dalla figura 3 emostra come far apparire un form checontenga una ProgressBar in movimento(effetto dinamico che non viene reso dal-la figura). L'avanzamento del valore della

MCmicrocomputer n. 188 - ottobre 1998 267

§~ l 1:1-. I -- I 12-. l .•-.. l~

x

x

(MOIForm), che fa da cornice, e da altriform (MOIChild), che vivono all'internodella cornice.

Tutti i prodotti della suite Office e con-seguentemente tutti i prodotti Office-compatibles rispettano la tecnologiaMDI. Ad esempio quando si usa Word enon si apre o si crea nessun documentoè attiva solo la cornice MOI. Ogni docu-mento che si apre o si crea occupa unform MDIChild.

Ovviamente, se i documenti aperti so-no più di uno diventa importante la vocedel menu Finestre, che consente di pas-sare da una finestra aperta all'altra, an-che se la seconda non è visibile, checonsente di posizionare "in cascata" levarie finestre attive, oppure di vederleallineate in orizzontale oppure in vertica-le. Infine, se queste finestre sono iconiz-zate e sparse nella finestra cornice sipuò attivare la voce Allinea le Icone.

Per realizzare con il Visual Basic (qual-siasi versione) un'applicazione MDI, oc-corre eseguire alcuni passi obbligati (ciriferiamo al VB 5.0 Enterprise Editionversione 5.0):

Figura 5 - Visual Basic 5.0 - Applicazione d'e-sempio Biblio.mdb.A supporto del materiale d'esempio del prodot-to MS Visual Basic 5.0 sono tradizionalmentepresenti due database in formato MOB (dettoanche formato Access). Si tratta dell'intramon-tabile file NorthWind.mdb, di argomento culina-rio, e del file Biblio.mdb, che contiene editori, ti-toli ed autori (Publishers, Titles, Authors) relativia libri riguardanti l'informatica. Nella strutturadel database è presente anche la tabellaTitle_Author, che serve per risolvere la proble-matica relazionale "molti a molti", dovuta al fattoche un titolo può essere scritto da più autori(nei testi riguardanti l'Informatica non è un casoraro). Poiché si tratta di un archivio reale, la Mi-crosoft provvede a tenerlo aggiornato ed a met-terlo a disposizione per il download dal suo sitoInternet.

..-.•...c_ •••••-."CIy

•••••~T_Faxc.mn.ts

MDI (Multiple Docu-consiste in un form

osettura MDI

programma, documentato in figura 6, èbene conoscere la struttura del databa-se che utilizzeremo. Lo vediamo e de-scriviamo in figura 5.

La sincronizzazione tra avanzamentodella lettura dei dati del data base e dellaProgressBar è ottenuta sfruttando le

. 'R dCount (che indica il nu-cord) e AbsolutePosi-essivo del record cor-e messe a disposizio-et DAO.

propneta ecorFigura 4 - Visual Basic 5.0 - Un'applicazione di mero totale dei retipo 501 con due finestre d'appoggio. tion (numero progrIn questo secondo esempio usiamo un form rente), gentilmentprincipale nel quale occorre inserire quattro da- ne da un RecordSti, due date e due nomi di città prelevati da unasempliçe lista. L'inserimento viene facilitato dadue finestre 501 "volanti", la prima che mostra i/

Due o tre ccontrollo Calendar (i/ più classico degli ActiveX)e la seconda che mostra un controllo ListBox (ilpiù classico dei controlli standard). In un 'appli- sull1architecazione 501 tutti i form se ne vanno per i fattipropri, quindi i/ compito del programmatore èquello di gestirne l'apertura e la chiusura, indi- Un'applicazioneviduando gli eventi in seguito ai quali aprirli o ment Interfacelchiuderli.

" x1ZI fjle ~ l[low __ Qobuo &t-n 1"'* Add-n ~ ljo\> J.ti.xla 3 laktt ":emldN',fjMl..idM-lglxl i]Ptivsu Sub CI_CHet () ~G • 1: Es323.Cçt.ion • "Sede di Patunza" IReggio CaIol>M -=.![s323. Shov[nd Sub

!J2Il&'98 -=.!Private Suh C2_Cl1ell: () -IG • 2: Es323.Capticn • "Sede di Dest.1nazione" 1

M_

-=.![s)l). !ho.End Sub -'civate Sub Pl_ClicJr:() !J9IlBI98 IQ

, • 1: !:s3l2. Sho•.!:nd Sub_Puvate Sub 'Z_ClickU

, • 2: Es322.Shov .,. .. , X

l:nd Sub

" . X

"""""" ~1-· i] I.... i] Boriagosto 1998 B_- ••• - - • - - Ceglori

F••••• .,. l 1 G"""".2 3 • 5 • 7 B N"""• 10 11 12 13 " 15 P•••• -,. 17 ,. ~20 21 22 Peso«.

Zl 2. 25 25 27 25 29Reggio CaIol>M

.:.JR••••00 31 • .

'"O .1 I •

Il terzo esercizio è un'applicazione pra-tica di quanto visto nel primo. La Pro-gressBar viene fatta avanzare via via chevengono letti i dati da un data base e viavia che questi dati riempiono un griglia.

Per meglio capire il funzionamento del

, x1ZI fjle ~ l[low _ _ Qobuo &t-n 1"'* Add-n ~ ljo\> .a1«J x Figura 3 - Visual Basic 5. O -

I(GeMrtl) i] I(D.d•••••••• ) i] Una semplice applicazione di

Dia T - tipo 501 con due finestre.

'civate Sub Pl_Cl1C:lr: Cl ~ Il nostro primo esercizio. Ilfa3H. !ho" primo dei due form/finestre,fa3H. PB.Il1n • o quello in secondo piano, con-!s31l. PB.IIII)( • 15 X

tiene solo un pulsante il cui!s31l. SL.Il1n • o!s31l. SL.llax • 15 E] compito è quello di attivareXl.lnteIval • 500 un timer e di mostrare il se-T • o canda form, che contiene un

lnd Sub -- controllo ProgressBar chePrivat.e Sub XI_Ti.er() avanza di "una tacca" ogni se-

[s311. PII. Value • T ';Uli'è·;.;,!",

I

canda. Come evidente dal li-ts311.!5L,Valut • T stato, l'avanzamento delleT • T + lIt T • 15 Then T • o Il Dio 'ITI' j , ProgressBar dura quindici se-

[nd Sub condi ed alla fine di tale perio-do l'avanzamento ricomincia.Il metodo Show, che si ese-gue su un oggetto form, per-mette due varianti a secondache i/ form si apra come mo-

-; dal o modeless. Un form si

~.!L.J ~ dice modale (spesso tradottoin finestra a scelta obbligato-ria) quando viene impedita

qualsiasi operazione sugli altri form aperti al momento fin quando i/ form stesso non venga chiuso.

268 MCmicrocomputer n. 188 - ottobre 1998

",.,"""""'"lts15~tH

1filPMMPUI

"""""""'",...-~~~.!~-

--

Figura 8 - Visual Basic 5.0 -Il menu FinestreUn 'applicazione di tipo MOI dispone sempredella voce di menu Finestre che comprendeuna serie di voci standard (affianca, sovrapponi,allinea) necessarie per dislocare opportunamen-te le varie finestre aperte nella cornice MOI, op-pure per passare da una finestra aperta adun 'altra momentaneamente coperta. Il flagWindowList associa alla voce di menu un sotto-menu che mostra l'elenco delle finestre/formaperte al momento. Il metodo per provocarel'allineamento o la sovrapposizione delle fine-stre (che debbono essere aperte) è Arrange,che dispone di quattro varianti.

Nell'esercizio di figura 9 vediamo co-me sia possibile generare dinamicamen-te nuove finestre partendo da una fine-stra prototipo.

Oim FF As New Es341

,~[a~·Vt~ ..••••••~~t.c:.ll~.s-(E_ •.Ob'.••.a-M h.-_.~ ,_ ..•.l_""..•.....•.-·------~1 Maod{ ••LntSb""~("'Stol~~ .•••••~IoktOdElClIl! ~K"""~WiooIcltEc.elSIo~~~.~~ •.•wo- ~~:e

PIivate SUb Pl_tHetO

l" Ou:{91S<:r:ftI\.1kMMhlnUI: •. 11Gl.~.'llhl!GLItooIrs •• J.S ••"sel~t publ1sbt:r:s._~.wtbolt••wtbot •••s •. $ •••• b.tJ.u.uUf:.tiUe$.('fMllNèluMd) .•S ••Se" te •. ~lhbtu.UU •••(ut.l. wUlOr:)•• Ulou ••s .. s •..•"te P\lIlllhtlllU.Pl.1bm.Tluu.t\èIll"S •• S •••• 4Irn1 Tit1t1.ISI"rTiUt 4Iltbot.).IDW"S •• S •.•• _ (TlU. À\ltbGl).~I1I •• À~tbon •• ,,-Ul ••S •• S •.•• ~ TttJ.t •• T1tllt 11.t. I." •. TI •.•• ' ~.It: by b.tblna.Mltl\lK"'!letll:R •. llC.~rcl;,.tIS.CJIIfl..lootUut: 1'2 •. IlIl..R:f:eot~t: PSl..llo'Oth.ut1a1S.l.tI.1t111.•. H h3U.PI.'" •. r.U ta3Sl.:sllov: IloI:'ftntiDo Vhlh .ot IlR.tofGl.• ll4ltea M.'UlUII) • l •. N..n •.l6l(U •. t •. 1IR.f'1daf)1 •. z •. llP..ft.tebIO)h3Sl." a Nl:.ANohltAP'Gntim .•. lM.~xt

''''tdU.tl1./k: ser.~.IkNa;,,"oiAtet aO: Cl.hck. a Ttue:n IO W-~GCeM*\tEnd !lub

hlvau !ll.lb ~l.Mdn!Jn Nt • ~~I"d.:'_\Ur:to,blbUo •.cIl".G.1.JiloIw·ofa.tol .• o: 61 •. "'Titolo"Gl.t'o!- l: il .• "A\I~,,"61.Col" 2: G1" .•~ •.6,1.C.1 .• ': lil •. "Idlt:Qn"

En4 "'"

Olllt"'" ••• _Figura 6 - Visual Basic5 O - Un 'applicazionein due finestre - Va-riante con caricamen-to dati.Si tratta di una varian-te dell'esercizio vistoin figura 3, trasportatoin un caso reale. Sup-poniamo che nella no-stra applicazione ci siaun form che consentadi eseguire una ricer-ca per parola chiave,ad esempio una paro-la chiave presente neltitolo di un libro regi-strato nel nostro data-base di prova Biblio. Irisultati della ricerca,ovvero l'elenco dei li-bri, li riversiamo inuna griglia. Se il data-base è di dimensionimedio-grandi (supe-riore a diverse decine di migliaia di record) i tempi dell'operazione possono essere lunghi (da dieci se-condi in su). E' opportuno e facile visualizzare un form che mostra un controllo ProgressBar che segna-la l'avanzamento della ricerca. Poiché il risultato della ricerca è un RecordSet OAO se ne possono facil-mente usare le due proprietà RecordCount e AbsolutePosition per pilotare la barra graduata.

chiudere i vari form figli (Fl.Show eF2.Show, per intenderei) ed il secondoche permetta le classiche operazioni trale finestre/form aperte.

Nell'esercizio che vedete nelle figure 7e 8 vi proponiamo un'applicazione conuna cornice e tre form MOIChild contrad-distinti da colori (es. proprietà Name:Ros-so, Caption:Rosso, BackColor: Rosso). Ilform MOI cornice, che si chiama Colori,dispone di un menu che permette di ese-guire tutte le operazioni necessarie all'a-pertura ed alla dislocazione delle finestre.

E' chiaro che quest'esercizio serve so-lo per comprendere il meccanismo di ge-stione delle finestre che è del tutto indi-pendente ed indifferente dal contenutodella singola finestra.

Figura 7 - Visual Basic 5. o - Esercizio base perun 'applicazione MOI.Il principio che sta alla base della tecnologiaMOI è che con una stessa applicazione è nor-malmente possibile generare e gestire più do-cumenti' insieme. L'applicazione MOI prevedeun form contenitore ed i vari documenti realiz-zati sono form in esso contenuti. In un 'applica-zione MOI c'è un solo form MOI (è un tipo par-ticolare di formi e tanti form MOIChid. Impo-stando a True la proprietà MOIChild dei form fi-gli si crea la semplice dipendenza gerarchica tracontenitore e contenuto. Tra form MOI e formMOIChild intercorrono una dozzina di regoletteche occorre conoscere. Il nostro esercizio, de-scritto nel testo, serve per capire i meccanismidi base di un'applicazione MOI.

New Standard Exeiniziamo un nuovo progettochiamiamo il primo form Fl

menu Project Add New formaggiungiamo un nuovo formchiamiamo il secondo form F2

menu Project Add MOI formaggiungiamo il form MOIchiamiamo il form MOI Fa

proprietà MOIChild di F1poniamo a True la proprietà MOI-Child del form Fl

proprietà MOIChild di F2poniamo a True la proprietà MOI-Child del form F2

menu Project, Project Properties,StartUp Object

im'postiamo Fa come oggetto dipartenza

In questo modo abbiamo realizzatoun'applicazione MOI composta da unacornice MOI e da due form, Fl e F2. Ilproblema ora è quello di gestire l'apertu-ra e la chiusura dei due form che vivonoall'interno di Fa

Normalmente conviene creare un me-nu nella Fa, in cui ci siano almeno duerami, il primo che serve per aprire e

L:JJ

::J==..._<1•• CIbttet•.••.• tacNd •••••.:I

Pt:1vate Sub Cl_Cl1ck ()Es33t.3hov

End SubPtivll;t.e Sub C2 ClietO

ls33v.Shov - ,lnd SubPt:1vate Sub c3_Cl1ck()

Es33b. !ho.tnd SubPt:1vate Sub !l_Cl1ckl)

Es33.J.runqe o!nd SubPrivate Sub t2 CHeti)

!:s33.Au:arule-lEnd SubPrivate Sub U_ClicJc l)

Es33.Àuang:e 2End SubPt:1vat.e Sub f4_Cl1ck!)

Es33.À.tte1'),oe 3End Sub

MCmicrocomputer n. 188 - ottobre 1998 269

nlp'xl~

I_ I titolo 1J.\ltou •.... .O~893'lZ4-7-6 uu..ric I).tab •••• H.t'non., P.eat' 1'840-8939124-7-6 uu..rlc Dataha ••• Chu,. Chin ... 1984.0-8939124-7-6 Nv.M.arie O.tab •••• Bonczak, a ... 19840-8939134-4-8 .e'W Dir.ceion •... CliUorci. 19860-8939134-4-8 N'w Dlraetlon •... Barn.t.in, ... 19860-8939134-4-8 N•• Diraetlon •... Ari.v. Cadi 19860-8939161-9-6 Dir.ceton. anel... !fina.i, Hark 19930-8939161-9-6 Diract.lon. ADd. •.• Schular. D•• 19930-8939161-9-6 Dir.ceton. anel.. Lava.on, H .• 19930-8939166-9-2- An Advancad Lo... Dodd, T=y 19900-8939lEi6-Sl-2 An Advanc:ad 100 .. Chlvar •• I.D. 1'90 -0-8939161-0-6 An Acivanc:ad Lo. _. Chlvar •• I.D. 1"00-8939167-0-6 An Advaneacl Lo_. Docid. Tony l'S'O0-U39174-5-1 Lo;ie , Th. Ba... Tooh.y, 'OM 199$

"ME'·.' Lo;ic , Th. Ba.. Cook., Dan. o o 19950-U391?S-2-4 DAtab••• Ovn.J: ... Bri;;., D. 19920-89391'15-2-4 tl.tab •.•• Ovn.r ... Jl'anklin, ." 19920-8939176-5-6 M.re.l , 8i.u1. .. l'Iurr.y, Vi .. 0 19920-8939176-$-6 1'I&r<:.1, 8i.u1. .. Spohr.r, ,.. 19920-8939116-9-0 Build1n; & D.d ... Jon •• , lc1llard 19920-8939116-8-0 Bu.i1c1ing & Dd... Nu•• baua, .. 1992O·U39184-1-S Advan<:•• in Lo.. Vilk.r.on, ... ~~~}fJ... --_._, .. . ~ - - l

111 DTlCHIIlOUI ASSOC~ DUCKlJOR.TH$ DUIKIIiT00 PURI COmroHICATIOJlS$ !>Wl. Pu••

DUSKKIR PUB GROUPl!l DUXBU1Y[!11 S I

I T H1992:19931994

USTlRN COHPUTIJlC. LABO~UST·VIST CINTIR

00 IDIJmUR.GH UNIV[ti IDITIOJlSe IDITOP.1.A.L INTUPUSIS

1992:Iil .POCALCI!l IDUCATlON UICIALlSTSlH It>UCAtIONAL DISIc.N[Jl- IDUCATIOH'u alSU».cH CI-!.J• !.I

"M#'am•iMI.

Ptivate Sub CL_CHetOXl • Input80x ("Ioae della 10r.")Se t. " • New ts341,r.Caption • Xl; rr.!hovLl.Cluz:Fel: I • O To rOl:u.Count ~ l

It 1ol:alll(I).Capt.ion <> "Cont.enlt.oz:e" ThenLl.Addlt.ea rOJ:u(I).Capt.1on

:End U

[n:e~~I NUOY.tF'•••• IPz:1v&.te Sub Ll_Cl1ctOFOI: I • O To 'Ot.,.CoWlt - l

It FoualI) .Capt1on • 11 ThenMsqBox Ll10t.8 (l). Se:trocus

[nd HNext l

End Sul)

tJ ~ ldt »ow ~ l'pa QoIluo!li'> tooIo add-1nI ~ ~

~'ifi:l.' ~g )('~I'U'\"'è"l ~".I"~GB":R'ICi cl C1Ick

Figura 9 - Visual Basic 5.0 - Generazione automatica di finestre MOIChild.Nell'esercizio precedente i tre form MOIChild erano precostruiti, in questoesercizio vediamo invece come sia possibile generare automaticamentetutti i form MOIChild necessari all'applicazione partendo da un form proto-tipo. Vediamo anche, ma lo descriviamo nel testo, come sia possibile in-serire degli oggetti, nel nostro caso una lista da cui scegliere un elementoe conseguentemente generare un nuovo form, direttamente nel formMOI. In pratica un form MOIChild è una classe (prototipo) dalla quale sigenerano le varie istanze (copie).

Figura lO - Visual Basic 5.0 - Riempimento di un form Explorer Stvle.Questo eseréizio è un po' più complesso degli altri per cui siamo costrettia presentarne a parte il listato Si tratta di un tipico form Explorer StVlecon a sinistra un controllo TreeView nel quale abbiamo inserito l'elencodegli editori e per ciascuno di essi l'elenco degli anni in cui risulta che ab-biano pubblicato dei volumi. AI clic sull'editore nel controllo ListView ap-paiono i volumi pubblicati (in realtà tutte le accoppiate tra autori e titoli!.Se si fa clic sull'anno appaiono i volumi pubblicati in quell'anno.

, in cui Es341 è il nome del formFF.Show

, il form viene visualizzatoFF.Caption="Titolo"

, e se ne possono modificare le pro-prietà

Ma l'esercizio mostra altre cose. Adesempio come sia possibile inserire uncontrollo di tipo Picture all'interno di unform MOI e come questo possa ospitarealtri controlli. Nel nostro caso abbiamoinserito un pulsante "Nuova Finestra" checi chiede il nome della nuova finestrache stiamo generando e una ListBox chemostra tutti i nomi delle finestre fino adallora create. La ListBox serve anche perattivare il form selezionato. Notare anchecome sia possibile sfruttare la "collec-tion" di form che ogni applicazione mettea disposizione dell'utente.

Qualche regolasui form MDI

Ricapitoliamo alcuni dei concetti rela-tivi ad un'applicazione MOI:

In un'applicazione di tipo MOI esisteun solo form MOI e possono esistereinfiniti form Child.

Il form MOI non può ospitare control-li se non di tipo Picture. Se questo vie-ne inserito si posiziona automaticamen-te in alto nel form MOI. Il controllo di ti-

po Picture PUÒ, a sua volta, ospitarecontrolli normali.

Per aprire e chiudere form Child sipossono usare i soliti metodi Show eHide, legandoli ai soliti eventi, ad esem-pio agli eventi di mnu o di ToolBar.

In un'applicazione MOI il menudeve sempre prevedere la voce Fine-stre, che serve a passare da una fine-stra aperta ad un'altra, oppure a dispor-re ordinatamente le stesse.

Normalmente, in un'applicazioneMOI, il menu dell'applicazione risiedenel form MOI e non nei vari form Child.Se un form Child dispone di un suo me-nu, questo viene "ereditato" dal formMOI contenitore quando il form Childviene attivato.

Nel caso di applicazioni ospitanti OLEContainers è possibile "negoziare" la po-sizione del menu, che può essere tra-sferito nel form esterno oppure apparireall'interno del contenitore.

ApplicazioniExplorer Style

Le applicazioni SOl e MOI prevedonol'uso di più formo Un'applicazione Explo-rer Style consiste sostanzialmente in ununico form diviso in due parti, quella asinistra contenente un controllo Tree-View (vista ad albero) e quella a destracontenente un controllo ListView. C'è

un rapporto di dipendenza tra i due con-trolli in quanto il contenuto di quello didestra viene dinamicamente aggiornatosulla base di quanto accade nel control-lo di sinistra.

Il termine Explorer Style deriva dalgestorè delle risorse di Windows (inquello in lingua originale si chiama Ex-plorer) che ben si presta a tantissimi uti-lizzi applicativi, quelli in cui sia importan-te anche l'organizzazione dei dati chevengono visualizzati, o la navigazione al-la ricerca del dato o del documento giu-sto.

Se realizzate l'applicazione ExplorerStyle con la procedura di autocomposi-zione ottenete un'applicazione già pron-ta, in cui, però, i due controlli Tree e Li-st non sono "popolati" di dati.

E' utile comunque partire dal form au-tocomposto in quanto permette di spo-stare dinamicamente il separatore traTree e List, operazione resa possibiledall'utilizzo di un oggetto di tipo Imagetrasparente.

I due controlli TreeView e ListViewfanno parte del gruppo di controlli ag-giuntivi Microsoft Windows CommonControls 5.0.

Se non sapete caricare di dati unaTreeViewo una ListView ... ve lo inse-gniamo noi con i due esercizi di figura12 e 13, in cui il caricamento avviene "amano", nel senso che vediamo diretta-mente nel listato i dati caricati, che nonprovengono quindi da un database.

270 MCmicrocomputer n. 188 - ottobre 1998

Dirn DD As DatabaseDirn RR, RS As RecordsetDirn ND As NodeDirn IT As ListItem

. _ IlpuGLlAlFoggiolSon S•••••

Isons •••••1.111

CAMPANIAN.,.I

PUGLIAFoggio-

Sulla TreeView possiamo fare due ti-pi di click, quello sull'Icona, che servead esplodere/implodere il ramo, e quel-lo sull'item (nodo) che serve per sele-zionare l'item stesso.

L'evento principale è il NodeClick, ele proprietà della TreeView danno tuttele informazione sul nodo cliccato.

In figura 13 vediamo come si carica laListView. Anche in questo caso convie-ne dire due o tre cose.

La ListView permette le classichequattro viste (Icone Grandi, Icone Picco-le, Lista e Dettagli). Poiché nelle primetre si vede solo una informazione alfa-numerica, è chiara l'importanza del fattoche ad ogni elemento corrisponde unitem (dato principale) e poi vari subi-tems (dati secondari).

La proprietà con la quale si imposta iltipo di vista è View.

Per associare ad ogni item una iconaoccorre usare un controllo ImageList,che va riempito con le immagini neces-sarie (che vengono numerate) e poi as-sociato al controllo ListView. Quando sicaricano gli item nella ListView occorreindicare quale icona, quindi quale nume-

ro, è ad esso asso-ciata. Lo vediamochiaramente in fi-

Figura Il - Visual Basic 5.0 - Riempimento di unform Explorer Style - Listato.La complessità del listato dipende dal fatto che vitroviamo sia tutte le istruzioni necessarie a gesti-re i due controlli TreeView e ListView, che sonoabbastanza complicati, sia le istruzioni DAD, squi-sitamente database, che servono per riempire ledue liste con dati letti dal database. In entrambi icasi si utilizzano query, la prima alimentata dallatabella Publishers e Titles, che produce l'elencodegli editori e degli anni di pubblicazione, e la se-conda che mostra dati da tutte e quattro le tabel-le del database Biblio. Insomma occorre conosce-re i meccanismi delle query.

.,

TV

Private Sub P'_ CII'kOS.I Nod.' TV.NOd••. Add~ ,"1<100","PUGUA")S.I Nod.' TV.Nod •• Addt'x100", liWChlld, "1<110","Foggia")Sei Node. 'TY.NOdes.Add(")l110", MvChlld, "x111-. -San Severo'S.I Nodo' TV.Nod •• Addt'x100", liWCh"d, "1<120","B.1i")Sal Nodo' TV.NOdo.Addt'x120", liWChild, "><121","Bo~.tt.")Sol NodO. TV.NOd•• Add("x120", liWCMd, "><122",""'o~.tt.")Sei Nod.' TV.Nod •• Add("x1 20", liWChlld, "><123","B~ndlsr)Set Nod. a TV.Nod'8Add(")(1 00", lvoNChlld, "x1 30". -LeCCI'Set Nod. = TV,NOd.sAdd("x' 00", tvwChfld. "x1.0". "Taranto")S.I Nodo' TV.Nod •• Add~ , "><200","CMlPANIA")Sii NOdt: TV.NOdts,Add("x200", ttwChlld. -Xl1 0". -N,poMiSei Nod.' TV.NOd••. Add("x210", liWChlld, "><211","Sorrento")S.' Nod.' TV.NOd•• Add("x210", MoICMd,"><212", "Copli")S.I Nod.' TV.NOd.'Add("x210",liWChlld, "><213","Megol.")

End SubPlÌVilti Sub TV_NodeCllck(9Wal NodI 10.$ Node)11 : Node.FullPath12 =- T\I'.SellctedttemT3 :z Node,KtY

EOd Sub

Published] "

Published] "

Figura 12 - Visual Basic 5.0 - Come si alimenta un controllo Tre e Vie w.Mostriamo due programmi,più semplici dei precedenti,che hanno la finalità di mo-strare come si alimenta uncontrollo TreeView Inell'e-sempio si chiama TV). Danotare come occorra utiliz-zare delle chiavi per indica-re i rapporti gerarchici traun elemento ed i suoi di-pendenti. Non è necessarioche gli elementi siano cari-cati nello stesso ordine incui appaiano, in quanto pre-vale l'organizzazione impo-sta dalle chiavi. Non è ne-cessario caricare tutti glielementi subito ma il cari-camento può essere realiz-zato dinamicamente. Non èindispensabile per il funzio-namento dell'albero che glielementi "terminali" abbianouna chiave. Altre caratteri-stiche del TreeView le citia-mo nel testo.

CL As CornetlLib.Listltern)

"ISBN""Titolo""Autore""Anno"

Private Sub Forrn_Load()LL.ColumnHeaders.AddLL.ColumnHeaders.AddLL.ColumnHeaders.AddLL.ColumnHeaders.Add

End Sub

Private Sub LL_IternCliek(ByValT3 CL.TextT4 = CL.Sublterns(l)T5 = CL.Sublterns(2)T6 = CL.Sublterns(3)

End Sub

Private Sub TV_NodeCliek(ByVal Node As Node)LL.ListIterns.ClearXO = Node.Key: Xl = InStr(XO, ''l''}If Xl > O Then

X2 = Mid(XO, 2, Xl - 2): X3 = Mid(XO, Xl + l)Else

X2 = Mid (XO, 2): X3 = ""End IfTl = X2: T2 = X3S "Seleet Titles.ISBN,Titles.Title,Authors.Author.Titles. [YearS S & frorn Publishers,Titles, [Title Author] ,Authors"S S & where Publishers.PubID = Titles.PubID"S S & " and Titles.ISBN = [Title Author] .ISBN"S S & " and [Title Author] .Au_ID = Authors.Au_ID"S S & " and Publishers.PubID=102"If X3 <> "" Then S = S & " and Titles. [Year Published]=" & X3S = S & " Order by Titles.ISBN"Set RR = DD.OpenReeordset(S, 4)Do While Not RR.EOF

Set IT = LL.Listlterns.AddIT.Text = RR.Fields(O}IT.Sublterns(l} RR.Fields(l)IT.Sublterns(2) RR.Fields(2)IT.Sublterns(3) = RR.Fields(3)

RR.MoveNextLoopEnd Sub

Privata Sub Cl_Cliek()On Error Resurne NextSet DD = OpenDatabase("d:\vvvv\terzo\biblio.rndb"}S "select distinct Publishers.PubID,Publishers.Narne,Titles. [YearS = S & " Frorn Publishers,Titles "S = S & " Where Publishers.PubID = Titles.PubIDS = S & " Order By Publishers. Name, Ti tles. [Year Published]Set RR = DD.OpenReeordset(S, 4)Do While Not RR.EOF

KO = "K" & RR.Fields(O}: Kl = RR.Fields(l}Set ND = TV.Nodes.Add(, , KO, Kl}

Do While Kl = RR.Fields(l)K2 = RR.Fields(2): K3 = KO & ''l'' & K2Set ND = TV.Nodes.Add(KO, tvwChild, K3, K2)RR.MoveNext: If RR.EOF Then Exit Do

LoopLoop

End Sub

Sulla TreeView diciamo due o tre co-se.

L'organizzazione dell'albero dipendedalle chiavi.

Non è necessario che i dati caricatisiano caricati in ordine. L'ordine vienedato dalle chiavi.

La chiave deve essere alfanumerica.E' possibile caricare e scaricare i dati

dinamicamente, al verificarsi di certieventi. Questo consente (non lo vedia-mo) di caricare prima il primo livello del-l'albero e poi esplodere via via i rami sucui si fa click, oppure scaricare i ramiche vengono chiusi.

Per creare i rapporti gerarchici tra gliitem dell'albero non è necessario cheun elemento terminale abbia la chiave.La chiave stessa può essere, anzi quasisempre lo è, utile dal punto di vista ap-plicativo. Se ad esempio mostriamo ilcognome del dipendente di una aziendasi può usare come chiave la sua matri-cola.

MCmicrocomputer n. 188 - ottobre 1998 271

16.09

o.

n x• P.r avviareseeoli.re', ~ ~ 1C.lcol.trtc I

• Scegliere 1

l" C:.J~-.-J~ ~_~"L.:J~~~ _~..L:_L:J~.-:J~ ~J..:.L:J~~!J~...:J...J~-.J

Utilizzo della C.lcolatriceè possibile utiliuar. I" Calcolatrice in visualizzuione stand"rdper effe:ttYare calcoli semplici oppure in visualizzazionescientifica per effettuare calcoli scientifici e statistici •.•••nz.ti .

~ per •.••vi.re la Calcolatrice.Note

_____ ~II,ile.-ice

x

<O••.......•-1-11/oYo1

0Ud0"_i1rcKt.aIone.~913

_del",""",",E"*,,lUione cI •..•erneC

UliIuo

I~.:=.,.-'

l lIIIzo cllmelghg cl Koct.Il? Awiocll.f'lglococl~

lBuodiSR::rorillltlelUIzzo del Blocco note

,

lUzzOd-I?_ ••••••.••d_

LUnodl'Wor(f)adAccessofacllato~IrtrattenirnerfoU1.i di sistema

SI •••••0e3tlone del componerti heitdw•.•Connessione. reti

U1l1tl0 delle ~ cl CCN:iflSOHr'vtu""""" ~ .•.•

x..J.IJ x

• Ip'xl

© ©R'" V•• d

® @Neri Rosa

@ •Vdo

d'NN.H

.1

Otm rr As UsUlemPl'N'8te Sub P1_CNckOLV.COlumnHeadersAdd. ,·eoonome-lV.ColumnHeaders.Add •• -Nome-lV.ColumnHeaders.Add •• "Teletono·SellT= LV,UsutemS.Add(1, ·)W, -Rossr, 1)IT.SubltemS(1):: -Marco": rT,Subltems(2)::; -11.68.55"Sei fT::; LV,UstltemsAdd(2, "Xr, "Verdr, 5)rr.SuMems(1) = "Lino", rr.SuMems(2) = "34 .65.79"Se' rr = LV.L1slltemSAdd(3. =."Neri'. 3)rr.Subnems(1) = "Aldo", rr.Subnems(2) = "98.60.50"Sei rr::; LV.UstttemS.Add(<4, "X"-, -Rosa-, .)IT,Subltems(1)::; -Mario-; IT,Subltems(2) = -33.66.99"Set rr = LV.L1SlltemSAdd(5. "><5". "Viol". 4)rr.Subltems(l) = "Sruno", IT.SubMems(2) = "41.61.51"Selrr= LV.L1stltems.Add(6, "X6", -Blanchr, 2)IT.Subltems(1):: -Carlo-: IT.Subltems(2);::; -98.65.3T

End SubPnme Sub LV_ltemClick(9WallT A.sComcUUb.UsUtem)TO;::;IT.lndex: T1 ;::;IT.KeyT"l=rr.Tell!T3;::; IT.Subltems(1): Tot:: IT.Subltems(2)

End Sub

Figura 13 - Visual Basic 5. O - Come si alimenta un controllo ListView.La compagna del controllo TreeView è la ListView, quella che nel gestoredelle risorse di Windows 95 permette le classiche quattro viste (iconegrandi, icone piccole, lista e dettagli). Qui ne vediamo una in modalità ico-ne grandi. Nel listato vediamo come si caricano gli elementi della lista,che hanno un index, una key e che possono avere più subitem. Nel testodescriviamo anche come si fa ad associare a ciascun elemento una icona.

Figura 14 - Visual Basic 5.0 - Primo esempio di Explorer Style: il WinHelpdi Windows 98.La modalità di visualizzazione dei dati "alla Explorer" è diffusissima. Qui nevediamo un esempio applicativo chiarissimo, realizzato con il generatoredi help di Windows 98, che prevede una organizzazione Explorer Style eche lavora anche con file in formato HTML. Parliamo del generatore dihelp di Windows 98 in un altro articolo di questo stesso numero di Me.

lo era già da quell'oni:lre partito,e seguitava l'orme del mio duca,quando di retro a me, drizzando' l dito,

una grid6: '"ie' che non par che lucalo raggio da sinistra a quel di :!!Jotto,e come:vivo par che :!!Jiconduca!".

Li occhi rivol~i al :!!Juondi que:!!Jtol'OOtto,e vidile guardar per maravigl1apur ~, pur me, e 'l lume ch' era rotto.

"Perché l'animo tuo tanto s'impiglia",di:!!Jse'l mae:!!Jtro,"che l'andare allenti?che ti fa ciò che quivi ~i pi~pigUa?

Vien dietro a tr:lI!!, e la:!!Jciadir le qenti:~te. cometort"e ferma, che non crollagià mai la cime.per :!!Joftlardi venti;

ché :!!Jemprel' 01aO in cui pensiet" rampolla

.:..--Contenls Index

\la PlRO

Ic::.":",,

? CaRo.? Canto'? Cri>1V?-? CrilVJ

IConIo VI? cnoVi• e.tolX? Ctn:ox

ConIo )(I? Cri>lCJ

Cri>XI

fio lIodico ~ __ . _

Questa è la P"8I'll' di LATINA

Questa è la pagina di LATIN A

Questa è la pagina diLATINAcrr 1oN1No__

Quut"l. t la PlglM di. LA TlNA

O". ,

RietiVitsrbo

+ AbruzzoMoliseMarche

+ Sud

•l fio lIodico ~ VIi ~ l

l~· 'T_~~

V-I'!'ì •.•••JI..,.,.,..,/"'-'I,oISTOHTHUoùlno .•.•••

ITALIA """",'.-"UIllNA+ Nord- Centro+ Toscana

MarcheUmbrlaLazio

RomaFrosinome

Figure 15,16 - Visual Basic 5.0 - Secondo esempio di ExplorerStyle - Per navigare in Internet.La struttura ad albero, tipica del controllo Tree Vie w, è ora faci~mente praticabile con il OHTML, il nuovo formato delle pagineper Internet. In alternativa si possono usare dei componenti Acti-veX o Applet Java, che mostrano oggetti TreeView, alimentabilipiù semplicemente di quanto non si debba fare con il OHTML.Nel testo parliamo più a fondo di questo argomento. Un fatto ècerto: qualsiasi sia lo strumento che usiamo per sviluppare, adesempio Visual Basic, ad esempio pagine HTML, più o meno po-tenziate, dobbiamo sempre prevedere come modalità di naviga-zione sui nostri dati la modalità Explorer Style.

gura 13.Quando si fa click su un ele-

mento della ListView (eventoItemClick), è possibile leggere lastessa serie di proprietà, indipen-dentemente dal tipo di vista su cuila ListView stessa è settata.

In conclusione si tratta di dueoggetti, la TreeView e la ListView,più complessi degli altri, per quelloche fanno. Sono necessariamenteun po' più difficili da programmare.

In figura 11 vediamo l'applicazione diquanto detto sui due oggetti ad un casopiù complesso, in cui a sinistra si sele-zionano dei dati che fanno da filtro per i

dati che si vedono sulla destra. I datiprovengono dal nostro database Bi-blio.mdb, ed in pratica servono per sele-zionare dei titoli per editore e per annodi stampa.

Guardiamociintorno

Per concludere l'articolo mo-striamo due figure prese qua e làin altre applicazioni in cui si puòusare una modalità di visualizza-zione di dati e di documenti Explo-rer Style. L'help di Windows 98,una pagina DHTML e, sempre in

una situazione Internet/intranet, una pa-gina realizzata con ActiveX, che permet-tono viste ad albero e permettono deilink tra le due porzioni della videata.

272 MCmicrocomputer n. 188 - ottobre 1998