Linee di Codice che vengono dal passato            


Non tutto il codice che segue è stato sviluppato da me, ci sono anche vecchi
free tips, usati con le vecchie versioni di Visual Basic,  che funzionano bene
anche con NSbasic CE. I li ho solo recuperati, modificati se necessario e li
aggiungerò qui di volta in volta dopo averli provati.
(Test effettuato con NSbasic CE ma l'uso del codice è a vs. solo rischio) 

1) Spezzare una stringa e usarne il contenuto come volete.

Questo codice era utile per inserire (per esempio) elementi in una Combo
o List Box senza usare ripetute  .Additem istruzioni e in particolare per
caricare, modificare a runtime gli elementi desiderati semplicemente con
la lettura di una diversa stringa. Questo è il codice:

Dim ITEM, n
ITEM = "First |Second |Third |Fourth |The Last"

Do While Len( ITEM )
n = InStr( ITEM + "|", "|")
List1.AddItem Left( ITEM, n - 1)
ITEM = Mid( ITEM, n + 1)
Loop

Questa piccola routine è molto più utile di quanto si pensi.
Usatela abbinata ad un object array e vi permetterà di scrivere codice più
compatto ed efficiente. 

2) Dir, una utile istruzione per vedere il contenuto del vosto palmare 

Dir è una istruzione di  MS FileSystem.Dll così per usarla in NSbasic CE 
dovrete aggiungere al vostro programma questo oggetto.

ADDOBJECT "FileSystem" 

Ritengo che l'uso di Dir sis ben conosciuto ma ne parlo egualmente qui
poichè la trovo utile in molti casi.
Potete usarla per trovare se un file o un folder esiste semplicemente con:

Dim sPath,
SPath = " [Path da cercare]"
If Right(sPath,1)="\" then
   sPath=sPath & " [nome File da cercare] "
else
  sPath = sPath & "\" & " [nome File da cercare] "
end if
If Len(FileSystem.Dir(sPath))<>0 then Print "File found" 


O aggiungendo poche linee di codice potete trovare tutti i files o subdirs 
di uno specifico path e inserire i risultati in una List,box

Dim sDir, iput, filece
iput = " [stringa contenente il path completo della directory da controllare] "
sDir = FileSystem.Dir(iput)
Do While Len(sDir)
If sDir <> "" Then List1.Additem sDir
sDir = FileSystem.Dir( )
Loop 

I caratteri Jolly sono utilizzabili (example : iput=" \windows\*.* ")
Notate che l'istriuzione Dir è utile ma lenta così, se dovete lavorare con
un grande numero di elementi è meglio usare un codice diverso. 

3) Salvare spazio sul piccolo schermodi un palmare Pocket PC/WinCE.

Creare una interfaccia grafica per una unità CE non è facile dovendo usare
spesso molti oggetti in uno spazio limitato. Anche se avete risolto il vostro
problema in alcuni casi sono le informazioni troppo larghe per lo schermo.
Pensate, per esempio, a un completo e lungo file path. 
Queste poche linee di codice possono aiutarvi a mostrare l' informazione 
tagliando il full path per inserirlo in una textbox/label di piccola misura.

Function LongPath(Lpath, Lmax)
Dim I, LblLen, StrLen, TmpStr
TmpStr=Lpath
LblLen=Lmax
If Len(TmpStr)<=LblLen then
         LongPath = TmpStr
         Exit Function
End If
LblLen = LblLen-6
For i = Len(TmpStr) - LblLen to Len(TmpStr)
        if Mid(TmpStr,i,1) = "\" then exit For
Next
LongPath = Left(TmpStr,4) & "..." & Right(TmpStr,Len(TmpStr)-(i-1))
End Function

Aggiungendo un Bottone e due TextBox  a una form potete vedere come
funziona.(Io penso che necessiti di qualche modifica per aumentare la
efficienza anche se così funziona) 
Usando il Codice 2) e 3) dovrebbe essere possibile ottenere un FileListBox
che mostri i Files' path (pur se ridotti) senza necessità di usare una barra
orizzontale di scorrimento che risolve il problema ma sottrae prezioso
spazio sullo schermo e non è disponibile per le ListBoxes in NSbasic. 

4) Un po' di codice per un tip

Continuando a cercare modi per usare al meglio il piccolo schermo di una
unità CE potete trovare qui del codice che vi può aiutare.
Capita talvolta che sarebbe utile usare una descrizione per spiegare l'uso 
di un commando o chiarire il significato di una icona sul comando stesso
che potrebbe non essere bene interpretata sullo schermo del palmare.
Nelle ultime versioni di VB è molto semplice creare qualche "TIP"  che
appaia quando il mouse passa sopra un comando, ma .....in NSbasic CE ?
Così ho scosso la polvere da un vecchio codice creato per VB3 e l'ho poi
aggiustato per ottenere un effetto simile.
Create una form sulla vostra unità CE e aggiungete quanto segue:

Output.Scalemode = 3

  ADDOBJECT "Label","Label1", 91, 21, 98, 21
  Label1.BackColor = 16777215
  Label1.ForeColor = 0
  Label1.BorderStyle = 1
  Label1.Visible=False

  ADDOBJECT "CommandButton","Button1", 70, 77, 104, 32
  Button1.Tag = "This is a TIP trail"

Lanciandolo vedrete un command button mancante di descrizione.
Aggiungete ora il seguente codice alla form del programma:

Sub output_mousemove(button, shift, x, y)
If (x >= 65 And x =< 175) And (y >= 75 And y =< 110) Then
Label1.Top = Button1.Top + Button1.Height
Label1.Left = Button1.Left + Button1.Width/2
Label1.visible = True
Label1.Caption = Button1.Tag
Else
Label1.visible=False
End If
End Sub

Otterrete così che muovendo il vostro stylo vicino al bottone, sarà mostrata
una label che conterrà la stringa che è contenuta nella proprietà Tag del
Button1.(come citato nel manuale NSB il codice per lo Stylo da usare come
parametro button è  = 0 )
Il bordo sensibile può essere creato usando pochi pixels, e sarà possibile
così mettere il Button1 vicino ad altri oggetti senza spreco di spazio.
Con una routine Select Case/End select e un po' di fantasia potete anche
creare instruzioni da usare con oggetti multipli che supportano la TAG.
Ricordate anche di mettere come prima righa di codice nella Sub
Button1_Click, se necessario, quanto segue:

Label1.visible=False

Facendo così usando il Bottone la finestra del Tip sarà chiusa altrimenti
spstando lo stilo in altra zona della form l'etichetta sparirà da sola.
ATTENZIONE- Alcune unità CE hanno schermi non molto sensibili e quindi 
                      rispondono con qualche ritardo all'evento MouseMove.

5) Deselezionare un elemento selezionato in una list o combobox

Talvolta un elemento selezionato in una ListBox o ComboBox rimane
attivo anche se vorreste vedere tutta la lista senza selezioni.
Potete deselezionare l'elemento inutilmente attivo usando la seguente
linea di codice:

ListBox1.Listindex = -1

6) Un po di codice per usare le textboxes

Le textboxes sono tra gli oggetti più usati permettendo l'inserimento o la
visione di stringhe di testo in un programma.
Queste sono alcune linee di codice per aggiungere inusuali caratteristiche. 
A) per avere il testo di default selezionato quando la textbox diventa
    attiva e permettere l' immediato inserimento di una nuova stringa:

Sub textbox1_gotfocus()
Textbox1.selstart=0
Textbox1.sellength=Len(textbox1.Text)
End Sub

B) Da usare quando volete aggiungere una stringa a quella di default:

Sub textbox1_gotfocus()
textbox1.selstart = Len(textbox1.Text)
End Sub

C) Per creare una Input TextBox che accetti solo inputs numerici:

Sub TextBox1_Change
If Instr("1234567890",Right(Textbox1.Text,1))=0 Then
TextBox1.Text = Left(TextBox1.Text,Len(TextBox1.Text)-1)
TextBox1.selstart=Len(TextBox1.Text)
End If
End Sub

7) Codice per ogni tipo di immagine in formato verticale o orizzontale.(by efsoft)

Per usare questo codice NSB dovrete usare la S309 picture box ocx
(free) che è la sola capace di utilizzare files Bmp,Gif e Jpg, invece della
MS picture box.

ppath=       '(path completo e nome del file's senza estensione)
'°°°° determina il tipo di immagine
If Len(FileSystem.Dir(ppath & ".jpg")) Then photo = ppath & ".jpg"
If Len(FileSystem.Dir(ppath & ".gif")) Then photo = ppath & ".gif"
If Len(FileSystem.Dir(ppath & ".bmp")) Then photo = ppath & ".bmp"
Pic0.Picture=photo
'°°°°° controlla l'orientamento dell'immagine
If Pic0.imageWidth - Pic0.imageHeight >0 then
Pic0.move 5,65,230,150
Pic0.Visible= true
else
pic0.move 83,25,150,195
pic0.visible=true
End if
End If
End Sub
Potrete ottenere ppath dal vostro codice o usare una TextBox.
8) Due comuni listboxes e poche linee di codice ed ecco qui la VB DirListBox e la FileListBox da usare con NSBasic.
(by efsoft) Aggiungete a una Form 2 ListBoxes e chiamatele DirListBox e FileListBox abilitandone le ScrollBars verticali. Aggiungete il codice e l'oggetto FileSystem.... Option Explicit
Dim DFlag, Dir1
Dim PStore(10)

Sub DirListBox_Click()
Dim Dk, Dx, TT
If DirListBox.ListCount - 1 = 0 Then
Dir1 = DirListBox.List(0)
PStore(0) = Dir1
DFlag = 0
Call DirList(Dir1)
Else
If DirListBox.ListIndex > DFlag Then TT = 1
If DirListBox.ListIndex = DFlag Then TT = 2
If DirListBox.ListIndex < DFlag Then TT = 3
Select Case TT
Case 1
DFlag = DFlag + 1
Dk = DirListBox.ListIndex: Dir1 = DirListBox.List(Dk)
PStore(DFlag) = Dir1
DirListBox.Clear
For Dx = 0 To DFlag: DirListBox.AddItem PStore(Dx): Next
Call DirList(Dir1)
Case 2
Exit Sub
Case 3
Dk = DirListBox.ListIndex: DFlag = Dk
Dir1 = DirListBox.List(Dk)
PStore(DFlag + 1) = ""
DirListBox.Clear
For Dx = 0 To DFlag: DirListBox.AddItem PStore(Dx): Next
Call DirList(Dir1)
End Select
End If
End Sub

Sub DirList(Dir1)
Dim sDir, sDirListBox
sDir = FileSystem1.Dir(Dir1 & "*.*", 16)
Do While Len(sDir)
If InStr(sDir, ".") = 0 Then
DirListBox.AddItem Dir1 & sDir & "\"
End If
sDir = FileSystem1.Dir()
Loop
FileListBox.Clear
sDirListBox = FileSystem1.Dir(Dir1 & "*.*")
Do While Len(sDirListBox)
FileListBox.AddItem LCase(sDirListBox)
sDirListBox = FileSystem1.Dir()
Loop
End Sub