Novità

NUOVO AMBIENTE SCRIPT AREA TECNICA

  • Creatore Discussione Creatore Discussione LuigiB
  • Data di inizio Data di inizio
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
 
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.
 
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:
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)
 
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?
 
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
 
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.
 
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
 
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
 
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:
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
 
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 :)
 
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
 
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
 
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 23 novembre 2024
    Bari
    33
    80
    86
    52
    25
    Cagliari
    67
    57
    59
    05
    80
    Firenze
    31
    32
    58
    88
    77
    Genova
    40
    39
    23
    36
    81
    Milano
    28
    58
    45
    25
    38
    Napoli
    20
    82
    23
    44
    57
    Palermo
    76
    56
    88
    62
    31
    Roma
    12
    81
    59
    74
    72
    Torino
    46
    53
    72
    45
    23
    Venezia
    04
    12
    42
    64
    20
    Nazionale
    63
    44
    78
    10
    55
    Estrazione Simbolotto
    Torino
    43
    42
    12
    39
    22

Ultimi Messaggi

Indietro
Alto