' Rapid-Q by William Yu (c)1999-2000 . ' ================================================================================ ' Upload_il_tuo_script_su_Rapidq.it ' Capitolo_15__Programmazione_COM ****** 15. Programmazione COM ****** Component Object Model (COM) e Distributed COM (or DCOM), sono specifiche che definiscono la creazione di oggetti e la comunicazione fra oggetti. Rapid-Q supporta solamente programmazione COM client (cioè non è possibile creare server COM). Siccome il lavoro non è completo, alcune delle informazioni contenute in questo capitolo potranno cambiare in futuro. 15.1 Estensioni COM supportate COM ha parecchie estensioni che sono cresciute nel tempo. Purtroppo Rapid-Q è limitato solo ad alcune di esse: * client COM (o controllore di Automazione) è implementato in QOLEOBJECT * Documenti Active è implementato in QOLECONTAINER I controllori di automazione possono essere utilizzati per operare su server come MS WORD localmente o da remoto. Quali sono i benefici dell'automazione del server? Dal momento che il server può essere chiamato da un'altra macchina, è possibile liberare risorse e cicli di CPU nel sistema cliente. Siccome si può automatizzare un'applicazione in una rete (o Internet), non è necessario che l'applicazione risieda nella vostra macchina per fare del lavoro utile sulla stessa. Immaginate di automatizzare dei macchinari da casa vostra. Documenti attivi è simile all'automazione, tuttavia il 'documento' (probabilmente un controllo ActiveX) è incluso nella vostra applicazione. Una volta inclusa, è possibile utilizzare l'automazione per controllare il comportamento del documento.Rapid-Q non sopporta le librerie Type, così non è possibile il collegamento di vtable. Parlando di collegamenti, un server COM normalmente viene registrato nel vostro computer la prima volta che viene eseguito o installato. Ciò non è sempre vero per DLL e OCX, così per registrare un server COM manualmente potete utilizzare il programma di Windows regsvr32. regsvr32 myprog.dll Potete eseguire il programma dal prompt di MS-DOS o tramite Avvio/esegui. Esistono dei programmi per registrare un oggetto COM, vi rimando al file di aiuto di Windows su API per maggiori informazioni. 15.2 QOLEOBJECT Come accennato nella sezione precedente, QOLEOBJECT implementa un controllore di automazione. Questo componente funzione in modo simile a VB (no, VB non ha un componente QOLEOBJECT), tranne che per alcuni aspetti che sono implementati in modo diverso o non ancora supportati. Vediamo alcuni esempi confrontando i due metodi: ' Bontrambi gli esempi utilizzano MS WORD ' in VB DIM Obj AS OBJECT Set Obj = CreateObject('Word.Basic') ' or just DIM Obj AS Word.Basic Obj.AppShow ' in Rapid-Q DIM Obj AS QOLEOBJECT Obj.CreateObject('Word.Basic') Obj.AppShow Notate che Typecheck è OFF per OBJECT and QOLEOBJECT, così quando viene chiamato Obj.AppShow in realtà si chiama il metodo AppShow in MS WORD. Notate anche che Rapid-Q supporta il metodo Invoke. Questo serve ad eliminare alcune ambiguità , ed anche per fornire un'alternativa. Cosa succede se MS Word possiede un metodo che si chiama CreateObject? In Rapid-Q ciò provoca dei problemi in quanto CreateObject è un metodo valido di QOLEOBJECT, così il metodo che sarà chiamato sarà quello di QOLEOBJECT, non quello di MS WORD. L'alternativa è l'utilizzo del metodo Invoke. ' in Rapid-Q DIM Obj AS QOLEOBJECT Obj.CreateObject('Word.Basic') Obj.Invoke('CreateObject') ' Call CreateObject method in MS WORD Ovviamente questo esempio non funziona, MS WORD non ha un metodo CreateObject, ma rende l'idea. Analogamente si possono definire e verificare proprietà : ' in Rapid-Q DIM Obj AS QOLEOBJECT Obj.CreateObject('Gif89.Gif89.1') Obj.AutoStart = 1 Obj.Invoke('AutoStart') = 1 ' anche questo funziona Cosa non supporta Rapid-Q? Diversi tipi di dati e matrici non sono ancora supportati, come pure alcuni eventi. Inoltre, non è disponibile il metodo 'set': ' in VB DIM ADOCommand AS ADODB.Command DIM ADOConnection AS ADODB.Connection set ADOCommand.ActiveConnection = ADOConnection La riga in rosso non è ancora disponibile in Rapid-Q. Nella sezione Appendice, sotto QOLEOBJECT, troverete il metodo InvokeCopy che ha la stessa funzione, ma al momento non è totalmente operativo . 15.3 QOLECONTAINER QOLECONTAINER è fondamentalmente un contenitore che può contenere componenti ActiveX o documenti Active. Questo componente è molto simile a QOLEOBJECT, ed anche in questo caso Typecheck è Off, così potete automatizzarlo come fareste con un server. Userete spesso il metodo Invoke, in quanto QOLECONTAINER non possiede molte proprietà e metodi. Un modo per evitare questo problema consiste nell'assegnare il metodo Container di QOLEOBJECT. Questo crea un riferimento all'oggetto, e permette di utilizzare QOLEOBJECT per automatizzare il controllo. Per chi non li conoscesse bene, i controlli ActiveX sono controlli visuali riutilizzabili molto utilizzati in VB. Le limitazioni sono evidenti, Rapid-Q non supporta eventi, librerie ed altre cose già menzionate. '-- Un breve esempio DIM Form AS QFORM DIM Obj AS QOLECONTAINER Obj.Parent = Form Obj.CreateObject('gif89.gif89.1') Siccome un controllo ActiveX è un componente visibile, noterete che QOLECONTAINER richiede una proprietà parent. Bisogna anche prestare attenzione al fatto che il componente ActiveX potrebbe aggiornare il componente prima che il form sia visualizzato, il che darebbe come risultato Can't focus a disabled or invisible window. QOLECONTAINER possiede una proprietà AutoShow che può essere valorizzata con Falso, nel senso che il controllo ActiveX non deve essere visualizzato quando viene creato. Potete usare il metodo Show di QOLECONTAINER per visualizzare il controllo in qualunque momento dopo aver creato l'oggetto. C'è un altro metodo per evitare il messaggio di errore, vi rimando all'appendice alla sezione QOLECONTAINER per un esempio completo. ' =============================================================================== ' 2003 Holyguard.net - 2007_Abruzzoweb