Novità

Mente da programmatore

Per quanto riguarda la funzione scrivifile penso sia cosi:

Codice:
    Friend Function ScriviEstrazione(idEstr As Integer, strctEst As StrEstrazione) As Boolean
        Dim nOffset As Integer
        Dim sRiga As String
        Dim nLenRiga As Integer
        If idEstr > UBound(Estrazioni) And idEstr = UBound(Estrazioni) + 1 Then
            sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf
            nLenRiga = Len(sRiga)
            nOffset = ((idEstr - 1) * nLenRiga) + 1
            Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)
            Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
            objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
            objFile.Write(aB, 0, aB.Length)
            objFile.Close()
            objFile.Dispose()
            ReDim Preserve Estrazioni(idEstr)
        Else
            sRiga = StructArchivioToRecordArchivio(strctEst) & vbCrLf
            nLenRiga = Len(sRiga)
            nOffset = ((idEstr - 1) * nLenRiga) + 1
            Dim aB() As Byte = System.Text.Encoding.ASCII.GetBytes(sRiga)
            Dim objFile = IO.File.Open(GetPercorsoArchivio, IO.FileMode.OpenOrCreate, FileAccess.ReadWrite)
            objFile.Seek(nOffset - 1, IO.SeekOrigin.Begin)
            objFile.Write(aB, 0, aB.Length)
            objFile.Close()
            objFile.Dispose()
            Estrazioni(idEstr) = strctEst
        End If

    End Function
 
ciao , sembra ok , solo in quest'ultima funzione se aggiungi un' estrazione la dev aggiungere anche all'array tu fai il redim ma poi non la metti.
Ua volta corretto questo possiamo passare alla finestra browser estrazioni.
Infatti abiamo le funzzioni per leggere un ' estrazione (GetEstrazione) e per scriverla o in edit o nuova.

Quindi puoi creare una form a tuo piacimento con tutt ii campi dell'estrazione per mostrarl ia video , importante che ci sia una scrollbar che consenta di spostarsi sull'id voluto.
Ora è chiaro che non sia il caso di predisporre a mano 55 campi testo per i rispettivi 55 numeri, dobbiamo caricare i campi testo a runtime in modo da poterli anche indicizzare , sicche una volta appartenenti ad un arra di 55 elementi sarà facile sia scrverci che leggerci i numeri delle rispettive ruote.

quindi globale al form devi dichiarare un array di tipo maskedtextbox
Dim aTxtEstratti () as maskedtextbox

poi devi scrivee una routine che verrà lanciata al load del form che si occupera di creare a runtime i suddetti campi , li puoi fare siia textbox , sia MaskedTextBox , in questosecondo caso il controllo ti consente di impostare i valori validi in modoautomatico.
Dato che non lo hai mai fatto questa sub te la metto io , a te poi la gestione del funzionamento della maschera , ovvero la routine che muovendo la barra di scorrimento ci mostrerà i numeri e gli altri dati dell' estrazione.
Come vedi nella routine sotto si fa riferimento ad un oggetto panel che deve essere presente sul form in quanto è il contenitore dei campi testo.
Nota anche l'utilizzo dell'istruzione AddHandle rche serve per associare gli oggetti creati a runtime ad una specifica sub che ne gestisce l'evento voluto .

per ora metti uan scrollbar e gestisci la visualizzazione dell'estrazione allo scorrimento.
La tua finestra dovrà essere mostrata dal menu del form mdi che hai gia predisposto.


Codice:
 Sub LoadCampi()

        Dim lblRuota As Label
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim nHLbl As Integer = 15, nWLbl As Integer = 60
        Dim nLeft As Integer = 10, nTop As Integer = 10
        Dim i As Integer

        ReDim atxtNumeri(55)

        nX = nLeft
        nY = nTop

        For r As Integer = 1 To 11

            lblRuota = New Label
            With lblRuota
                .AutoSize = False
                .Left = nX
                .Top = nY
                .Width = nWLbl
                .Height = nHLbl
                .TextAlign = ContentAlignment.MiddleCenter
                .Parent = Panel1
                .Visible = True
                .Text = NomiRuote(r).Nome
            End With

            nX = nX + nWLbl

            For e As Integer = 1 To 5
                i += 1
                atxtNumeri(i) = New MaskedTextBox
                With atxtNumeri(i)
                    .Left = nX
                    .Top = nY
                    .Width = nWTxt
                    .Height = nHTxt
                    .MaxLength = 2
                    .Parent = Panel1
                    .Mask = "99"
                    .PromptChar = " "
                    AddHandler atxtNumeri(i).TextChanged, AddressOf Gestione_TextChanged

                    .Visible = True
                End With

                nX += nWTxt + 2

            Next
            nY = nY + atxtNumeri(1).Height + 1
            nX = nLeft
        Next

    End Sub

  Private Sub Gestione_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


    End Sub
 
Quindi se ho capito bene la situazione dovrebbe essere pressappoco cosi:

Codice:
Public Class frmBroserEstr
    Private Sub frmBroserEstr_Load(sender As Object, e As EventArgs) Handles Me.Load
        LoadCampi()

    End Sub
    Sub LoadCampi()

        Dim lblRuota As Label
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim nHLbl As Integer = 15, nWLbl As Integer = 60
        Dim nLeft As Integer = 10, nTop As Integer = 10
        Dim i As Integer

        ReDim aTxtNumeri(55)

        nX = nLeft
        nY = nTop

        For r As Integer = 1 To 11

            lblRuota = New Label
            With lblRuota
                .AutoSize = False
                .Left = nX
                .Top = nY
                .Width = nWLbl
                .Height = nHLbl
                .TextAlign = ContentAlignment.MiddleCenter
                .Parent = Panel1
                .Visible = True
                .Text = NomiRuote(r).Nome
            End With

            nX = nX + nWLbl

            For e As Integer = 1 To 5
                i += 1
                aTxtNumeri(i) = New MaskedTextBox
                With aTxtNumeri(i)
                    .Left = nX
                    .Top = nY
                    .Width = nWTxt
                    .Height = nHTxt
                    .MaxLength = 2
                    .Parent = Panel1
                    .Mask = "99"
                    .PromptChar = " "
                    AddHandler aTxtNumeri(i).TextChanged, AddressOf Gestione_TextChanged

                    .Visible = True
                End With

                nX += nWTxt + 2

            Next
            nY = nY + aTxtNumeri(1).Height + 1
            nX = nLeft
        Next
        AggiornaLimitiScroollBar()
    End Sub


    Private Sub Gestione_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'qui dovrei alimentare txtnumeri
    End Sub

    Sub AggiornaLimitiScroollBar(Optional bAggiornaLimitiScroll As Boolean = True)
        If bAggiornaLimitiScroll Then
            VScrollBar1.Minimum = 1
            VScrollBar1.Maximum = cArchivio.QuantitaEstrazioni
            VScrollBar1.Value = VScrollBar1.Maximum
            LabEstrTot.Text = VScrollBar1.Value
        End If
    End Sub

    Private Sub VScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles VScrollBar1.Scroll
        LoadCampi()
    End Sub
End Class
 
no ,loadcampi serve per creare gli oggetti testo per i numeri , quindi una volta creati sta apposto , percio va lancata solo nell'evento load del form , invece all'evento valuechanged della scrollbar devi scrivere una procedura che prende l'estrazione voluta , e trascrive ivalori a video nei campi creati a runtime e in quelli creati a mano come ad esmpio il campo per la data o per il numero estrazione
Gestione_TextChanged invece per ora non va usato , è l'evento che si scatena quando viene cambiato il contenuto dei campi testo dei numeri
 
"Griglia" e label popolati correttamente :

Codice:
Public Class frmBroserEstr
    Private Sub frmBroserEstr_Load(sender As Object, e As EventArgs) Handles Me.Load
        LoadCampi()
        ImpostaLimitiScrollBar()
    End Sub
    Sub LoadCampi()

        Dim lblRuota As Label
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim nHLbl As Integer = 15, nWLbl As Integer = 60
        Dim nLeft As Integer = 10, nTop As Integer = 10
        Dim i As Integer

        ReDim aTxtNumeri(55)

        nX = nLeft
        nY = nTop

        For r As Integer = 1 To 11

            lblRuota = New Label
            With lblRuota
                .AutoSize = False
                .Left = nX
                .Top = nY
                .Width = nWLbl
                .Height = nHLbl
                .TextAlign = ContentAlignment.MiddleCenter
                .Parent = Panel1
                .Visible = True
                .Text = NomiRuote(r).Nome
            End With

            nX = nX + nWLbl

            For e As Integer = 1 To 5
                i += 1
                aTxtNumeri(i) = New MaskedTextBox
                With aTxtNumeri(i)
                    .Left = nX
                    .Top = nY
                    .Width = nWTxt
                    .Height = nHTxt
                    .MaxLength = 2
                    .Parent = Panel1
                    .Mask = "99"
                    .PromptChar = " "
                    AddHandler aTxtNumeri(i).TextChanged, AddressOf Gestione_TextChanged

                    .Visible = True
                End With

                nX += nWTxt + 2

            Next
            nY = nY + aTxtNumeri(1).Height + 1
            nX = nLeft
        Next
    End Sub
    Sub ImpostaLimitiScrollBar()
        VScrollBar1.Minimum = 1
        VScrollBar1.Maximum = cArchivio.QuantitaEstrazioni
        VScrollBar1.Value = VScrollBar1.Maximum
    End Sub

    Private Sub Gestione_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub VScrollBar1_ValueChanged(sender As Object, e As EventArgs) Handles VScrollBar1.ValueChanged
        Dim str As StrEstrazione
        Dim i As Integer
        If cArchivio.GetEstrazione(VScrollBar1.Value, str) Then
            LabEstrTot.Text = VScrollBar1.Value
            LabEstr.Text = cArchivio.GetInfoEstrazione(VScrollBar1.Value)
            For r As Integer = 1 To 11
                For es As Integer = 1 To 5
                    i += 1
                    aTxtNumeri(i).Text = str.Ruote(r).Estratto(es)
                Next
            Next
        End If
    End Sub
End Class

ho aggiunto una function di comodo nella classe archivio simile a getestrazione ma per le info della label:

Codice:
    Friend Function GetInfoEstrazione(idEstr As Integer, ByRef RetEstr As StrEstrazione) As String
        If IsIdEstrValido(idEstr) Then
            RetEstr = Estrazioni(idEstr)
            Return RetEstr.Data.Data & " " & RetEstr.Data.Numero & " " & "(" & RetEstr.Data.IndiceMensile & ")"
        End If
    End Function
 
benissimo , ora devi gestire le modifiche all'estrazione corrente o l'aggiunta di una nuova.
la funzione per trasformare la struttura estrazione in un record ce l'hai
la funzione per verificare se un'estrazione è valida ce l'hai
la funzione per scrivere sul file pure
vedi un po come organizzare la finestra , poi che la vogliamo lasciare cosi questa finestra del browser , bisogna inserirci qualche funzionalità per il lotto .. a te le idee ...
 
ora che funziona riposta il progetto sempre allo scopo di far seguire gli altri .. ciao..
 
Perfetto riposto subito il progetto ... ho solo un problema che non riesco a risolvere ...una sciocchezza ma non ne vengo fuori. All'avvio del programma viene avviato il form MDI e la splash screen in contemporanea .... ponendo MDI in primo piano. Come posso risolvere?
 
facendo a meno di usare quelle merde di finestre preimpostate :)
Sarò antiquato ma io lo spalshscreen lo faccio da 0 in un form apposta.
quindi rimuovi lo splashscreen inserito dal wizard , e fai un form apposta.
Poi nelle proprietà del progetto come form diavvio imposti il tuo nuovo form spalsh.
e da li fai partire tutte le procedure.
appena le procedure si sono concluse mostri il form mdi e chiudi lo splash.
Attenzione al metodo di chiusura applicazione imposta ultimo form
Poi riposta il progetto.
A proposito l'array aTxt delal finestra estrazioni lo hai dichiarato globale alla form ?
 
Vedi l'allegato 2224374
buon pomeriggio dopo una verifica con virus total , ho questo risultato ,info in merito.Grazie
La traduzione letterale dichiara "Contiene uno o più eseguibili di Windows"
All'interno del progetto vi sono diversi file eseguibili e questo potrebbe essere rilevato come pericolo in quanto assume le sembianze strutturali di un virus... naturalmente è un falso positivo (termine inappropriato in quanto non viene rilevato virus ma dichiara solo il pericolo) quindi nessun problema
 
A
benissimo , ora devi gestire le modifiche all'estrazione corrente o l'aggiunta di una nuova.
la funzione per trasformare la struttura estrazione in un record ce l'hai
la funzione per verificare se un'estrazione è valida ce l'hai
la funzione per scrivere sul file pure
vedi un po come organizzare la finestra , poi che la vogliamo lasciare cosi questa finestra del browser , bisogna inserirci qualche funzionalità per il lotto .. a te le idee ...
Potremmo inserire una toolstrip con un button attraverso la quale evidenziare una determinata combinazione con la comparsa di un form come la tabella colorata di spaziometria. Anche un button che permette di evidenziare in modo automatico e senza inserimento nell'estrazione visualizzata, la combinazione più frequente o più ritardataria fino a quel momento, e se è presente una combinazione, una volta evidenziata compare un button (Visualizza info), il quale se cliccato, aprirà un form con i dettagli statistici delle combinazioni evidenziate .
Gestire nel menu archivio l'aggiornamento da internet e quello manuale
 
A

Potremmo inserire una toolstrip con un button attraverso la quale evidenziare una determinata combinazione con la comparsa di un form come la tabella colorata di spaziometria. Anche un button che permette di evidenziare in modo automatico e senza inserimento nell'estrazione visualizzata, la combinazione più frequente o più ritardataria fino a quel momento, e se è presente una combinazione, una volta evidenziata compare un button (Visualizza info), il quale se cliccato, aprirà un form con i dettagli statistici delle combinazioni evidenziate .
Gestire nel menu archivio l'aggiornamento da internet e quello manuale

ciao piano piano si puo fare tutto , alcune funzioni di statistica direi di metterle in menu a parte.
Per ora la cosa piu importante . è gestire l'edit e l'inserimento.
Quindi ci dovra essere un tasto "AGGIUNGI" e un tasto "SALVA" , il salva dovra gestire sla routine che decide se aggiungere una nuova estrazione o salvare le modifiche a quella corrente , il tasto SALVA si dovra abilitare solo se c'è una modifica o se si deve inserire uan nuova estrazione,, quindi quando premi "AGGIUNGI" devi predisporre i campi svuotandoli e attendendo che l'utente li riempia . alla pressino del "SALVA" saprai se devi aggiungere o editare , se stai mettendo una nuova dovraiaggiornare i limiti della scrollbar perchè c'è un 'strazione in piu.
Ci sono una seri di cose a cui devi stare attento per mantenere la solidità della funzione , per esempio l'utente puo fare aggiungi ma poi ripensarci in quel caso devi predisporre un tasto annulla che ti fa tornare alla situazione precedente.
per esempio premendo NUOVA , potresti cambiare il testo del pulsante in ANNULLA , sicche dentro all'evento cliclk se sul pulsante c'è scritto NUOVA devi fare una cosa se c'èscritto ANNULLA devi fare un'altra..
Quando inserisci un 'esrtrazione nuova ricordati che devi calcolare l'indice mensile che non è scritto nel file dell'archivio.Quidi ti dovrai prendere l'ultima estrazione disponibile e confrontare il mese con quella nuova che stai inserendo,
Per ora fai queste cose che sono le piu importanti di quella finestra.
 
Ultima modifica di un moderatore:
per aiutarti priam di iniziare a scrivere lcodice fatti un prospetto con gli stati della finestra e la situazione enabled dei pulsanti, e delel note su cosa fare

stato INIZIALE
pulsanti abilitati : NUOVA, CHIUDI
Pulsanti disabilitati : SALVA

stato ADDNEW
pulsanti abilitati : NUOVA diventa ANNULLA , CHIUDI , SALVA


stato EDIT ,
pulsanti abilitati : NUOVA , CHIUDI , SALVA


per intercettare la modifica di un campo da parte dell'utente puoi usare quell'evento che si scatena sui campi dei numeri e per gli altri campi come la data l'evento textchange dei rispettivi campi
Se l'utente fa una modifica i t asto SALVA si deve abilitare , se tenta dispostarsi mentre la modifica non è salvata va avvertito ,insomma cerca di pensare a tutto , fatti un prospettino con delle note e poi procedi
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 11 gennaio 2025
    Bari
    73
    43
    01
    58
    81
    Cagliari
    69
    60
    18
    02
    10
    Firenze
    25
    32
    18
    55
    54
    Genova
    48
    05
    40
    34
    69
    Milano
    10
    07
    70
    44
    79
    Napoli
    11
    89
    01
    34
    80
    Palermo
    37
    80
    82
    44
    77
    Roma
    78
    04
    38
    39
    56
    Torino
    08
    13
    30
    27
    24
    Venezia
    56
    75
    36
    18
    70
    Nazionale
    63
    83
    19
    31
    80
    Estrazione Simbolotto
    Bari
    35
    34
    12
    23
    20
Indietro
Alto