Scambiare codice NSbasic con Visual Basic 5 Nel capito n.1 del manuale di NSbasic CE si può leggere.... " (il linguaggio) implementa tutti i comandi comunemente usati in BASIC .............." Leggendo quanto sopra, molto tempo prima del rilascio della versione NSbasic Desk, ho pensato che sarebbe stato possibile scambiare il codice fra i due linguaggi Basic. E' ovvio che non ci sono particolari problemi a usare l'editor di VB per scrivere del codice standard che possa esser utilizzato poi in ambiente NSbasic CE, dovete solo ricordare che avrete comunque bisogno di NSbasic per utilizzare detto codice sul vostro dispositivo CE. Poichè è adesso disponibile la Vers. Desktop di NSB qualcuno potrebbe chiedesi perchè cercare ancora di usare l'editor VB IDE invece del nuovo programma. Prima di tutto si deve dire che NSbasic Desk è un programma molto buono e la possibilità di scrivere codice CE direttamente sul vostro computer testimonia il buon lavoro fatto da NSB, tuttavia il programma è ancora molto giovane per essere usato in maniera estesa ed è augurabile che venga sviluppata qualche successiva versione per renderlo più efficiente. Così può essere ancora utile usare in certi casi VB per scrivere in codice. Se volete provare con Visual Basic ( io uso la vers.5.0 ma penso possa essere usata anche una versione precedente) potrete ottenere: 1) un codice che... con poche modifiche, funziona sia su CE che Window (e così due separati e uguali programmi per i due sistemi se volete). 2) un migliore aiuto per il debug del codice standard di quello disponibile usando la NSbasic IDE. 3) la possibilità di sincronizzare i due programmi solo scambiandosi i files di dati usando ActiveSync. Ciò è reso possibile poichè NSbasic è come un subset di istruzioni VB e gli oggetti usano in molti casi la stessa sintassi per proprietà e eventi. Quello che differisce è invece il modo di disegnare la Form per la quale devono essere usate le rispettive modalità mantenendo però uguali i nomi e le dimensioni per gli stessi oggetti. Ricordate ancora che dovete usare codice 'Standard '. Questo significa che dovete dimenticare l'uso di oggetti e istruzioni particolari, non usate in tutti e due i linguaggi. In alcuni casi sarà necessario utilizzare alcune linee di codice exstra per allineare l'uso delle stesse funzioni nei due amnbienti. Alcuni esempi di questo codice di 'adattamento' sono qui disponibili per aiutare chi voglia provare la possibilità illustrata di scambiare codice come detto. Alcuni dei miei programmi (MsgWiz e NSmsgWiz, RemMe) hanno usufruito di questa possibilità durante lo sviluppo. Compariamo il codice Il codice Visual Basic ha molti oggetti, proprietà, eventi e funzioni. NSbasic Ce anche, ma quali di questi possiamo usare per codice comune? Prima di tutto si deve ricordare che per scrivere codice che sia utilizzato dai i linguaggi in questione dovete salvarlo in formato Testo, unico tipo leggibile da entrambi. Il secondo punto è di creare, usando VB una form che deve avere le stesse dimensioni dello schermi della unità CE su cui il codice comune dovrà essere usato utilizzando gli stessi nomi di oggetti su i due sistemi.(in tal senso può essere anche creata una Form template da usare nelle VB IDE). Possiamo poi proseguire verificando altri dettagli. Molti oggetti sono identici, per esempio: Command Buttons, CheckBox, Labels, List or ComboBox e così via. In questo caso se usate le proprietà base non dovreste avere problemi. Gli eventi invece possono causare qualche problema poichè alcuni oggetti in NSbasic supporatno solo, per esempio, l'evento Click mentre in VB lo stesso oggetto usa molti più eventi. Construtti come If..Then..Else o Select Case etc sono identici mentre le instruzioni come Open fornisce gli stessi risultati ma usando sintassi di tipo diverso. Questo è dovuto ( 'Open' può essere un buon esempio) alla necessità di aggiungere, usando NSbasic, l'oggetto File.dll che, nel caso di VBasic è già incluso con le sue istruzioni nel linguaggio VB base. Questo rende necessario, per esempio, di mettere prima delle usuali istruzioni il nome dell'oggetto relativo (File.open, Filesystem.kill etc) dopo aver aggiunto al progetto il relativo oggetto (Addobject "File",0,0,0,0) L'ultimo e piu complesso caso è quando si richiede di creare del codice per equalizzre l' uso di oggetti in entrambi i linguaggi. Il caso più evidente è quello del codice necessario per usare objects' arrays. Si può usare il mio programma NSassistant per ottenere questo codice già scritto ma, di seguito cercherò di chiarire il tipo di codice che dovrà essere creato. Vediamo ora cosa si può fare praticamente. Il punto di partenza di ogni progetto, come già detto, è l'nterfaccia grafica per l'utente, così possiamo iniziare a creare una Form con uguale uso in entrambi i linguaggi. In questo caso è meglio creare prima la Form in Visual Basic. Usando VB è possibile fare facilmente tutti cambiamenti necessari per ottenere la forma richiesta o ridisegnarla più volte se volete. Usare Visual Designer in NSbasic è egualmente molto facile ma richiede molto più tempo per creare la Form voluta a causa del piccolo schermo. La form potrà contenere vari oggetti come CommandButton, ComboBox, TextBox, Labels etc. e nell'esempio apparirà come di seguito: E'ovvio che creare una simile Form in Visual Basic è molto facile e veloce. Basta selezionare li oggetti necessari con un doppio click e trascinarli in posizione. Se volete un objects' array (labels, textbox etc) create l' oggetto base e copiatelo nella form le volte che volete. Potrete inoltre cambiare la loro posizione e le dimensioni se richiesto. Usando NSbasic dovrete invece aggiungere del codice per ottenere una Form che operi nella stessa maniera e considerare se usare Visual Designer o no. Se usate il Visual tool la creazione di oggetti comuni (buttons, combo etc) avverrà come in VB ed otterrete inoltre, automaticamente scritto, il codice per nascondere o mostrare la form. Poichè, tuttavia, li objects' arrays non sono riconsciuti da Visual designer io preferisco scrivere il codice direttamente (se non devo nascondere la Form che sto creando). The sintassi per aggiungere un oggetto in NSbasic è la seguente: ADDOBJECT " {Tipo Oggetto }", "{Nome Oggetto}", T, L, W, H where T is Top, L is Left, W is width and H is Heigth of the object. Così per aggiungere il primo bottone dovrete scrivere: ADDOBJECT "CommandButton","Button1",0,0,100,18 Otterrete un rettangolo che funziona come un bottone. Se volete cambiare il colore o font all' oggetto dovete poi scrivere sotto la linea di creazione la lista delle sue proprietà come sotto indicato per una di esse: Button1.BackColor = vbRed (per esempio) e nella stessa maniera fare con le altre proprietà. Con lo stesso sistema potete aggiungere li altri tipi di oggetti, per esempio la combo box (Tipo Oggetto 'ComboBox'). Il codice finale completo è visibile qua sotto: Dim vbGray ADDOBJECT "CommandButton","Button1",0,0,100,18 Button1.BackColor = vbGray '-------------------- ADDOBJECT "ComboBox","Combo1",135,0,100,18 '-------------------- ADDOBJECT "CommandButton","Button2",0,250,100,18 Button1.BackColor = vbGray '------------------- ADDOBJECT "CommandButton","Button3",135,250,100,18 Button1.BackColor = vbGray Se scrivete su la vostra unità CE (palmare in questo caso) le poche linee di codice che trovate qua sopra, da eseguire con NSbasic, dovreste vedere sullo schermo una immagine come questa: Gli oggetti ancora mancanti richiedono per essere creati alcune linee aggiuntive di codice diverso dalle precedenti. Visto che NSbasic supporta li objects' array potrete ottenere così di usare le stesse funzioni che oggetti simili offrono usando Visual Basic. Potete scegliere due modi per creare il codice necessario. Cercare sul manuale NSbasic che presenta un esempio relativo a Option Buttons o potete usare NSassist che scriverà il codice richiesto per voi direttamente sul palmare. Se nessuno dei due modi vi soddisfa potete vedere qui il codice richiesto: Dim Vc,Oc Vc=20:Oc=0 Dim I,Alabel(4) For I = 0 to UBOUND(Alabel) ADDOBJECT "Label","Alabel" & I,0+ ( I * Oc ),84+ ( I * Vc ),50,18 EXECUTE("SET Alabel(" & I & ") = Alabel" & I) EXECUTE("SUB Alabel"& I &"_Click" _ & vbCrLf & "Alabel_Click("& I &")" _ & vbCrLf &"END SUB") Alabel( I ).BackColor = vbRed Alabel( I ).FontBold = True Alabel( I ).BorderStyle=1 Alabel( I ).Caption="" Next Potrete poi modificare Alabel( I ).Caption per attribuire un testo a ogni label. Ovviiamente con lo stesso codice potrete usare oggetti diversi come TextBox, CommandButtons, Option or CheckBox. Il solo problema usando detto codice è che otterrete solo oggetti allineati verticalmente o in orizzontale inoltre gli oggetti avranno tutti le stesse dimensioni. Il codice qui di seguito mostrato permette di usare con NSbasic anche array di oggetti come è possibile creare in Visual Basic, dotati cioè di un indice da richiamare per eseguire il codice associato come avviene per il codice precedentemente mostrato ma ANCHE di modificare la posizione e le dimensioni dei singoli oggetti indicizati. Considerando pertanto le caratteristiche degli oggetti ancora mancanti nella form per crearli dovremo usare il seguente codice: Dim Blabel(4) Dim PosLab,PosLbl,x,p,z, y Dim L,T,W,H y=0 PosLab="70,84,50,18|70,104,100,18|70,124,125,18|70,144,50,18|70,164,150,18" I=0 Do While Len(PosLab) z=Instr(PosLab + "|","|") PosLbl=Left(PosLab,z-1) x=0 Do While Len(PosLbl) p=Instr(PosLbl + ",",",") If x=0 Then L=Left(PosLbl,p-1) If x=1 Then T=Left(PosLbl,p-1) If x=2 Then W=Left(PosLbl,p-1) If x=3 Then H=Left(PosLbl,p-1) PosLbl=Mid(PosLbl,p+1):x=x+1 Loop ADDOBJECT "Label","Blabel" & y ,L,T,W,H EXECUTE("SET Blabel(" & y & ") = Blabel" & y) EXECUTE("SUB Blabel"& y &"_Click" _ & vbCrLf & "Blabel_Click("& y &")" _ & vbCrLf &"END SUB") Blabel( y ).FontBold = True Blabel( y ).BorderStyle=1 Blabel( y ).Caption="" PosLab = Mid(PosLab, z + 1):y=y+1 Loop Le linee di codice sopra indicate creeranno un array di Labels la cui dimensione and posizione singola potra essere variata semplicemente variando i valori posti nella stringa "PosLab". (e non per sole Labels ). Al termine abbiamo ottenuto 2 forms (VB e NSbasicCE) che possono essere usate con codice standard su entrambi i sistemi e quindi usare codice in comune con pochi altri aggiustamenti. Se non gradite copiare il codice delle 3 parti lo trovate QUI