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