Novità

NUOVO AMBIENTE SCRIPT AREA TECNICA

L

LuigiB

Guest
prendendo spunto dall'esempio del video adesso spiegamo un'altra caratteristica di TwinBasic , l'overload delle funzioni
Grazie all'ovrerload noi possiamo creare routine con lo stesso nome ma che abbiano parametri divrsi , sarà poi il compilatore a riconoscere quella giusta grazie proprio ai parametri che vengono passati alla funzione.

ad esempio volevo aggiungere una nuova ScegliOpzione che invecedi tornare l'indice scelto tornasse un valore associato all'indice.

per farlo la combobox ha l proprietà ItemData che è una proprieta legata ad ogni item contenuto , questa proprietà itemdata in vb6 poteva solo conenere valori numerici , credo anche qui quindi ho aggiunto questa funzione nuova che coesiste co nquelal di prima

1675443761873.png


e anche nel form che contien la combobox ho aggiunto una nuova funzione che si chiama come quella di prima


1675443825638.png


queste funzioni possono coesistere grazie all'overload e noi possiamo usarele tutte e due a seconda dei casi
 

i legend

Premium Member
Allora legend ti va di seguirmi per mettere la famosa scegliNumeri ?La vuoi fare Tu ?
Sono diventato scemo per mettere una label che quando si apriva il form mi dava un titolo. La tua sCaption.
Se mi dai un quesito passettino passettino , ci provo più che volentieri, ma non aspettarti molto.
Non conosco i comandi devo studiare.
Non basta la logica , bisogna avere CONOSCENZA.
se hai pazienza ci provo.
 
L

LuigiB

Guest
nuovo aggiornamento importante perche ho fatto delle modifiche nel progetto twinbasic , c'erano degli errori che lo mandavano in hang in alcuni casi.. come vedete pure io sbaglio...


registrate daccapo la dll eventualmnente facendo prima pulizia del registro

finche non abbiamo una versione definitiva purtroppo va fatto se la dll va riregistrata ed in questo caso è necessario

LA PULIZIA DEL REGISTROSI PUO FARE A MANO APRENDO REGEDIT PER CHI LO SA FARE
E CERCANDO TUTTE LE VOCI CHE CONTENGONO VSDLLGIOCHI , BISOGNA CANCELLARE LA CHIAVE CHE LE CONTIENE NON IL VALORE

1675457524230.png


altrimenti usare l'utility apposta ed eseguire le istruzioni nel file leggimi.


ECCO IL FILE DELL AGGIORNAMENTO





Legend alla fine l'ho fatot io .. meglio cosi perche ho visto che il caricamento dinamico dei controlli in twinbasic non funge ancora come in vb6
quindi avantia forza di workaraound...
 

Allegati

  • 1675457168847.png
    1675457168847.png
    182,3 KB · Visite: 8
  • 1675457280615.png
    1675457280615.png
    24,9 KB · Visite: 8
Ultima modifica di un moderatore:

Rookie

Advanced Member >PLATINUM PLUS<
Buongiorno Luigi, FYI ti riporto testualmente quanto recita tra i vari FIX la beta238 di TwinBasic:
  • fixed: parser edge case where a space between a function name and the opening parenthesis could be misinterpreted (e.g. Split (a,b) was failing)
 

i legend

Premium Member
ciao Luigi scaricato l ultima versione
sto dando un occhiata al codice per studiare un po
ho visto come tu calcoli le controfigure
ho visto che usi le stringhe
domanda

è piu veloce cosi , oppure si puo caricare l array con il calcolo

utilizzando spaziometria
ho caricato in un array aN(90) la controfigura
questo mi è servito per costruire la stringa

questa funzione scritta cosi potrebbe essere un alternativa altrettanto valida oppure
impegna piu spazio visto l che l array ha 90 elementi anziche 10?
so che questo è solo un discorso di ottimizzazione ed eleganza di codice
ma visto che stiamo imparando, impariamo bene , anche le finezze

Codice:
Function ControFig( n As Variant) As Integer
Dim s As String
s="0,1,2,3,4,5,6,7,8,9,10,3,1,2,3,4,5,6,7,8,9,10,4,1,2,3,4,5,6,7,8,9,10,5,1,2,3,4,5,6,7,8,9,10,6,1,2,3,4,5,6,7,8,9,10,7,1,2,3,4,5,6,7,8,9,10,8,1,2,3,4,5,6,7,8,9,10,9,1,2,3,4,5,6,7,8,9,10,10,1,2"
Dim aV() As String
aV=Split(s,",")
Return =aV(n)
Next
in spaziometria , scritta come funzione funzia :)

a livello di tempistica credo sia altrettanto veloce , perche tanto si caricano solo una volta all inizio del programma giusto?
 
L

LuigiB

Guest
caro Legend per risponderti dovrei innanzi tutto ricordarmi che diavolo siano le controfigure , quel codice l'ho preso direttamente da spaziometria essendo implementato in twinbasic è uguale ..non ci ho fatto particolare attenzione fidandomi che in spaziometria fungeva
 

i legend

Premium Member
Nella mia versione 1.631 il 38 era sbagliato in questo che hai postato è corretto ho controllato a spanne.

Sono sicuro che il tuo codice sia ottimizzato ed elegante.
Mi chiedevo se utilizzare una string come ho fatto io era più impegnativo in termini di spazio per il pc.

Insomma per imparare a scrivere bene.
Ho tanto da studiare.
 
L

LuigiB

Guest
Nella mia versione 1.631 il 38 era sbagliato in questo che hai postato è corretto ho controllato a spanne.

Sono sicuro che il tuo codice sia ottimizzato ed elegante.
Mi chiedevo se utilizzare una string come ho fatto io era più impegnativo in termini di spazio per il pc.

Insomma per imparare a scrivere bene.
Ho tanto da studiare.
il tuo codice si potrebbe ottimizzare ancora meglio preparando un array in memoria che deve essere dichiarato privato nel modulo dove risiede la tua funzione che lo devoe potrer veder , poi qui vedi che si lancia una funzione che alimenta gia degli array di utilità , devi aggingere la chiamata alal routine che alimenta l'array dopo quelle che ci sono , poi modifichi la tua funzione che punta direttamente a quell'array


1675513815048.png


1675513795951.png
 

i legend

Premium Member
ciao Ho provato a scrivere la funzione ControFig


private aControfig () as integer ' se la dichiaro cosi poi per forza di cose devo utilizzare Redim altrimenti mi da errore
Scrivi la sub InitaControfig che poi inizializzero
Codice:
'questa è una sub di esempio non valido
Sub Main
    Dim s,n,c,d
    Dim aGem(90)
    aGem(11) = True: aGem(22) = True: aGem(33) = True: aGem(44) = True: aGem(55) = True
    aGem(66) = True:aGem(77) = True:aGem(88) = True
    d = 2
    s = "aControFig=array(0,"
    For n = 1 To 90
        c = FuoriX(n,11)
        If aGem(n) = True Then
            d = d + 1
            c = d
        End If
       ' An(n) = c
        s = s & c & ","
    Next
    Scrivi Left(s,Len(s) - 1) & ")"
End Sub
questo è il codice da cui ho ricavato la stringa
oppure posso caricare l array


se dichiaro private aControfigura() as integer
poi InitArrayControFig

sub InitArrayControfig()
redim aControfigura(90)
devo fare il calcolo

invece vorrei utilizzare direttamente l array come integer per non dover fare i calcoli

pero mi da sempre errore
end orrore
 

Rookie

Advanced Member >PLATINUM PLUS<
Ciao iLegend, credo che la soluzione piu' semplice (e veloce) in questo caso sia un costrutto select/end select sul valore da testare.

qualcosa di questo tipo


valore in esame => Numero
controfigura=0

Codice:
select case Numero

        case 1,12,23,34,45,56,67,78,89
             controfigura=1

        case 2,13,24,35,46,57,68,79,90
             controfigura=2

        case 3,14,25,36,47,58,69,80,11
              controfigura=3

        case 4,15,26,37,48,59,70,81,22
              controfigura=4

        case 5,16,27,38,49,60,71,82,33
              controfigura=5

        case 6,17,28,39,50,61,72,83,44
              controfigura=6

        case 7,18,29,40,51,62,73,84,55
              controfigura=7

        case 8,19,30,41,52,63,74,85,66
              controfigura=8

        case 9,20,31,42,53,64,75,86,77
              controfigura=9

         case 10,21,32,43,54,65,76,87,88
              controfigura=10

end select
 
Ultima modifica:
L

LuigiB

Guest
ciao Legend , alimentanndo l'array in memoria una sola volta alla partenza del programam non devi preocuparti di quanto sia efficente tanto si parla di millesimi ..
nel tuo codice cerchi d costruire con un ciclo una stringa che poi dovrebbe essere l'istruzione da eseguire .. ma una stringa è una stringa se ci scrivi format c dentro non succede nulla... se la stampi a video invece vedrai il suo innocuo contenuto.

1675524229089.png
 

i legend

Premium Member
Grazie Rookie,
Sono tutte soluzioni ottime,
So che scrivere meno codice , non equivale ad avere un codice ottimizzato.
La soluzione di luigi è perfetta come anche la tua.
Io avevo pensato ,
Mi costruisco l array solo una volta
Fuori dal programma
Poi il numero sarà l indice dell array .

ma se non ci avete pensato voi, sicuramente non va bene.
Volevo capire perché.
Occupa più memoria?
Non si può banalmente scrivere?
Inizialmente avevo pensato ad una stringa da splittare
Poi ho pensato se devo fare lo split per ottenere un integer tanto vale farlo direttamente.

Sono stupidaggini le mie ovviamente .

Grazie ad entrambi :)
 
L

LuigiB

Guest
per utilizzare array ci vuole una variabile variant

dim av as variant
av = array ("0","1,"2") ' da un array d i stringhe

av = array (0,1,2) ' da un array di interi
 

i legend

Premium Member
No luigi la stringa l ho utilizzata per non scrivere l array a mano e non fare errori.

Il ciclo scrive
aControfigura=array(0,1,2,3 ecc
Mi serviva per non sbagliare a scrivere
 

i legend

Premium Member
Quello che Ottengo in stampa è la dichiarazione
Ho fatto così , come hai scritto tu
ma mi torna errore .
Sulla riga dell array nell sub initarraycontrofig
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 20 luglio 2024
    Bari
    02
    37
    06
    77
    72
    Cagliari
    28
    04
    69
    51
    83
    Firenze
    69
    17
    49
    75
    52
    Genova
    76
    33
    36
    66
    85
    Milano
    07
    51
    80
    89
    41
    Napoli
    10
    47
    28
    30
    48
    Palermo
    52
    24
    80
    62
    26
    Roma
    37
    29
    34
    35
    49
    Torino
    81
    13
    84
    88
    27
    Venezia
    84
    21
    39
    02
    03
    Nazionale
    81
    40
    56
    83
    35
    Estrazione Simbolotto
    Nazionale
    03
    14
    01
    16
    33
Alto