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