Novità

Mente da programmatore

LuigiB

Premium Member
allora il pulsante stop l'ho messo anche io , quindi ripartendo da questo sorgente che posto devi solo rimettere la parte degli archivi paralleli che stavi per fare .
Ho modificato il discorso browser , la finestra che hai fatto tu la usiamo per fare l'edit e l'aggiunta manuale delle estrazioni , e verra richiamata da quest'altra finestra che ho messo io e nella quale andremo a mettere altre funzionalitaa oltre a quelle che io ho messo per esempio


 

Edoardo_95

Advanced Member
ok allora adesso innanzi tutto fai un controllo per la funzione degli archivi paralleli che non possa essere lanciata se nellacombo non è selezionato l'archivio reale.
Poi devi fare una modifica ,tu attualemnte le estrazioni le leggi nel formsplash , invece devi leggerle al selecteditem della combobox degli archivi.
In prati quando uno seleziona l'archivio nella combo la classea archivio prende il puntamento a quel file.
Il controllo devo metterlo al load del form dove lancio il carimento degli item? oppure nel form crea archivi paralleli? non ho ben chiaro
 

LuigiB

Premium Member
dato che gli archivi paralleli vengono creati a partire da quello reale , e dato che con la nostra combo possiamo selezionare un archivio diverso da quello reale per esempio l'archivio L1 , allora la funzione per creare gli archivi paralleli non deve essere abilitata se nella combo non è impostato l'archivioreale , in pratica l'index 0 della combo

invee all selectedchange devi ricaricare la classe archivio col nuovo file prendendolo appunto dalla combo che serve per selezionarlo e che hai gia alimentato
 

Edoardo_95

Advanced Member
dato che gli archivi paralleli vengono creati a partire da quello reale , e dato che con la nostra combo possiamo selezionare un archivio diverso da quello reale per esempio l'archivio L1 , allora la funzione per creare gli archivi paralleli non deve essere abilitata se nella combo non è impostato l'archivioreale , in pratica l'index 0 della combo

invee all selectedchange devi ricaricare la classe archivio col nuovo file prendendolo appunto dalla combo che serve per selezionarlo e che hai gia alimentato
Aaaaaah ora ho capito. Bene mi metto all'opera appena possibile
 

Edoardo_95

Advanced Member
dato che gli archivi paralleli vengono creati a partire da quello reale , e dato che con la nostra combo possiamo selezionare un archivio diverso da quello reale per esempio l'archivio L1 , allora la funzione per creare gli archivi paralleli non deve essere abilitata se nella combo non è impostato l'archivioreale , in pratica l'index 0 della combo

invee all selectedchange devi ricaricare la classe archivio col nuovo file prendendolo appunto dalla combo che serve per selezionarlo e che hai gia alimentato
Bene allora nel form MDI mi sono creato una variabile privata globale al form.

Codice:
    Private IndexArchivio As Integer

questo indicelo cambio al variare del selectedchange

Codice:
    Private Sub cmbArchivio_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbArchivio.SelectedIndexChanged
        IndexArchivio = cmbArchivio.SelectedIndex
    End Sub

Inizialmente ho impedito l'apertura del frmCreaArchPar attraverso un messagebox ma poi ho cambiato idea.

all' interno della sub new del frmMdi ho fatto cosi:

Codice:
    Private Sub ArchiviParalleliPerPosizioneToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ArchiviParalleliPerPosizioneToolStripMenuItem.Click
        Dim frm As New frmCreaArchPar(IndexArchivio, cmbArchivio)
        ShowFormChild(frm, True)
    End Sub

Ho creato due variabili di comodo temporanee e globali all'interno del form frmCreaArchPar

Codice:
    Private cmbTmp As ComboBox
    Private IndexArchivioTmp As Integer

assegno i valori presi dalla chiamata nel form MDI

Codice:
    Sub New(IndexArchivio As Integer, cmb As ComboBox)
        cmbTmp = cmb
        IndexArchivioTmp = IndexArchivio

        InitializeComponent()

        GestioneAbilitaDisabilita(IndexArchivioTmp, cmbTmp)


    End Sub

disabili o abilito i controlli in relazione all'indice dell'archivio:

Codice:
   Sub GestioneAbilitaDisabilita(Index As Integer, cmb As ComboBox)
        Dim bControlForm As Boolean
        Dim bComboBox As Boolean


        If Index = 0 Then bControlForm = True And bComboBox = False
        ButtonOK.Enabled = bControlForm
        cmb.Enabled = bComboBox


        If Index <> 0 Then bControlForm = False And bComboBox = False
        ButtonOK.Enabled = bControlForm
        CheckBox1.Enabled = bControlForm
        ComboBox1.Enabled = bControlForm
        ButtonAnnulla.Enabled = bControlForm
        cmb.Enabled = bComboBox


    End Sub

Codice:
    Private Sub ButtonOK_Click(sender As Object, e As EventArgs) Handles ButtonOK.Click
        If ButtonOK.Text = "OK" Then
            SalvaValoreCfg(eValoriAppConfig.ArchiviParalleli, ComboBox1.SelectedIndex.ToString)
            ButtonOK.Text = "STOP"
            ButtonAnnulla.Enabled = False
            GroupBox1.Enabled = False
            GestioneEsegui()
            ButtonOK.Text = "OK"
            GroupBox1.Enabled = True
            ButtonAnnulla.Enabled = True
            cmbTmp.Enabled = True
            MessageBox.Show("Fine processo", "Fine", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.Close()
        Else
            cApNew.StopProcess()

        End If
    End Sub


all'evento shown del form in relazione all'indice mostro o meno una messagebox


Codice:
    Private Sub frmCreaArchPar_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        If IndexArchivioTmp <> 0 Then
            If MessageBox.Show("Gli archivi paralleli si possono creare a partire da un archivio di base. Selezionare l'archivio di base 'Lotto' in basso a sinistra. Archivio parallelo attualmente selezionato: " & cmbTmp.SelectedItem.ToString, GetNomeAppEVersione, MessageBoxButtons.OK, MessageBoxIcon.Information) Then
                cmbTmp.Enabled = True
                Me.Close()
            End If

        End If
    End Sub

Da notare che grazie al "passaggio" della combobox ho gestito internamente al form frmCreaArchPar l'enable e disable della cmbArchivio del form principale. In modo tale da non permettere cambiamenti di archivio durante l'esecuzione del form stesso e della function che crea gli archivi.
 

Edoardo_95

Advanced Member
dato che gli archivi paralleli vengono creati a partire da quello reale , e dato che con la nostra combo possiamo selezionare un archivio diverso da quello reale per esempio l'archivio L1 , allora la funzione per creare gli archivi paralleli non deve essere abilitata se nella combo non è impostato l'archivioreale , in pratica l'index 0 della combo

invee all selectedchange devi ricaricare la classe archivio col nuovo file prendendolo appunto dalla combo che serve per selezionarlo e che hai gia alimentato
Per quanto riguarda la seconda parte ho semplicemente fatto così


Codice:
    Private Sub cmbArchivio_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbArchivio.SelectedIndexChanged
        IndexArchivio = cmbArchivio.SelectedIndex
        If IndexArchivio = 0 Then
            sFileArchivio = GetPercorsoArchivio()

        Else
            sFileArchivio = GetPercorsoFileArchivioParallelo(IndexArchivio)
        End If
        cArchivio = New ClsArchivio(sFileArchivio)
    End Sub
 

Edoardo_95

Advanced Member
 

LuigiB

Premium Member
ciao Edoardo , hai fatto bene , per stare ancora piu sicuri dato che il cambio dell'archivio potrebbe creare confusione se cis sono altre funzioni aperte
bisogan fare cosi
1) chiudere tutti i form aperti previa conferma tranne il form mdi ovviamente
2) far apparire in modo modal la finsetra che crea gli archivi paralleli.

per chiudere tutti i form usa questa sub

Codice:
    Sub CloseAllForm()
        Dim formNames As New List(Of String)
        For Each frm As Form In Application.OpenForms
            If Not (TypeOf frm Is frmMdi) Then
                formNames.Add(frm.Name)

            End If
        Next
        For Each frmName As String In formNames
            Application.OpenForms(frmName).Close()

        Next
    End Sub
 

LuigiB

Premium Member
fatto questo io direi di dedicarci alla finestra Estazione che ho messo io ieri.
Innanzi tutto da li è possibile lanciare la funzione edit/add estrazioni quindi attenzione in quel pulsante prima va fatto un controllo che faccia aprire il form add/edit solo se siamo nell'archivio reale.
Puoi tranquillamente testare l'index della combo box della selezione archivio , se è 0 il form puo essere aperto senno no.

successivamente bisogna alimentarte le listview delel somme e delle distanze tra gli estratti , le devi mettere perche io non le ho messe.
 

Edoardo_95

Advanced Member
Nei sorgenti ho dimenticato di leggere le estrazioni solo dalla combo e non da combo e form splash. Ho già corretto. Poi posto
 

Edoardo_95

Advanced Member
fatto questo io direi di dedicarci alla finestra Estazione che ho messo io ieri.
Innanzi tutto da li è possibile lanciare la funzione edit/add estrazioni quindi attenzione in quel pulsante prima va fatto un controllo che faccia aprire il form add/edit solo se siamo nell'archivio reale.
Puoi tranquillamente testare l'index della combo box della selezione archivio , se è 0 il form puo essere aperto senno no.

successivamente bisogna alimentarte le listview delel somme e delle distanze tra gli estratti , le devi mettere perche io non le ho messe.
Va bene procedo
 

Edoardo_95

Advanced Member
fatto questo io direi di dedicarci alla finestra Estazione che ho messo io ieri.
Innanzi tutto da li è possibile lanciare la funzione edit/add estrazioni quindi attenzione in quel pulsante prima va fatto un controllo che faccia aprire il form add/edit solo se siamo nell'archivio reale.
Puoi tranquillamente testare l'index della combo box della selezione archivio , se è 0 il form puo essere aperto senno no.

successivamente bisogna alimentarte le listview delel somme e delle distanze tra gli estratti , le devi mettere perche io non le ho messe.
Sicuramente sarà una domanda sciocca e ti chiedo scusa ma non riesco a capire il perché. Vorrei prendere il valore della variabile globale interna al form con un readonly ma non funge.

Codice:
    Public ReadOnly Property ArchivioPuntato() As Integer
        Get
            Return IndexArchivio
        End Get
    End Property

Come posso risolvere?
 

LuigiB

Premium Member
bhe se la proprieta che vuoi mettere è nel form mdi non ha senso passare per quella variabile index archivio in quanto basta leggere la proprieta selected index delal combo

Public ReadOnly Property ArchivioPuntato As Integer
Get
Return cmbArchivio.SelectedIndex
End Get
End Property
 

LuigiB

Premium Member
sospendiamo un secondo questa finestra per accontentare chi ci chiede degli aggiornamenti

inserisci questa classe

Codice:
Option Compare Text

Public Class clsEstrMonopoli

    Private WebB As WebBrowser



    Sub New()
        WebB = New WebBrowser

    End Sub
    Public Property WebBrowser As WebBrowser
        Get
            Return WebB
        End Get
        Set(value As WebBrowser)
            WebB = value
        End Set
    End Property

    Sub Naviga(sUrl As String)


        WebB.Navigate(sUrl)
        Do While WebB.ReadyState <> WebBrowserReadyState.Complete
            Application.DoEvents()
        Loop

    End Sub



    Friend Function GetEstrazione(ByRef strctE As StrEstrazione, Optional nTentativiMax As Integer = 20) As Boolean



        Dim docAll As HtmlElementCollection = Nothing
        Dim doc As HtmlDocument
        Dim bFound As Boolean
        Dim nTentativi As Integer
        Dim nRuota As Integer, nPos As Integer
        Dim sTemp As String
        Dim nEstratto As Integer


        nRuota = 1
        strctE.DimensionaRuote()

        Do
            System.Threading.Thread.Sleep(500)
            Application.DoEvents()
            If Not IsNothing(WebB.Document) Then
                doc = WebB.Document

                For Each element In doc.All
                    If UCase(element.tagName) = "DIV" Then

                        If element.Id = "contenuti_aams" Then


                            docAll = element.All

                            Exit For
                        End If
                    End If
                Next


                If Not IsNothing(docAll) Then

                    For Each element As HtmlElement In docAll
                        If element.TagName.ToString.ToUpper = "TABLE" Then

                            If element.InnerText.Contains("Estrazione") Then
                                sTemp = element.InnerText
                                Dim i As Integer = sTemp.IndexOf(vbCrLf)
                                If i > 0 Then
                                    sTemp = sTemp.Substring(0, i)

                                    sTemp = Replace(sTemp, "n¬į", "")

                                    Dim av() As String = sTemp.Split(" ")
                                    If av.GetUpperBound(0) >= 3 Then
                                        If IsDate(av(3)) AndAlso IsNumeric(av(1)) Then
                                            strctE.Data.Data = ConvertTodate(av(3))
                                            strctE.Data.Numero = ConvertToInt(av(1))

                                            For Each cell As HtmlElement In element.All

                                                If (cell.TagName.ToString.ToUpper).Contains("TD") Then

                                                    nEstratto = ConvertToInt(cell.InnerText.Trim)
                                                    If nEstratto > 0 Then
                                                        nPos += 1
                                                        If nPos = 6 Then
                                                            nPos = 1
                                                            nRuota += 1
                                                        End If

                                                        strctE.Ruote(nRuota).SetNumero(nEstratto, nPos)
                                                    End If

                                                End If
                                            Next cell
                                        End If
                                    End If

                                    bFound = nRuota >= 10

                                End If
                            End If
                        End If

                    Next

                End If
            End If

            nTentativi += 1
            If nTentativi > nTentativiMax Then Exit Do
        Loop While bFound = False

        Return bFound

    End Function
End Class


in un form con una listbox invece metti questa sub e lanciala da un pulsante.


Codice:
    Sub AggiornaEstrazioni()

        Dim w As clsEstrMonopoli = New clsEstrMonopoli
        Dim strctLastE As StrEstrazione = New StrEstrazione
        Dim strctE As New StrEstrazione
        Dim sLink As String = "https://www.adm.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=[PROG]&anno=[ANNO]"  ' esempio  : https://www.adm.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=142&anno=2021
        Dim sLinkTmp As String
        Dim nLastMese As Integer
        Dim nIndiceMensile As Integer
        Dim nIdEstr As Integer
        Dim nAggiornate As Integer


        Dim NumEstrAnn As Integer



        If cArchivio.GetEstrazione(cArchivio.QuantitaEstrazioni, strctLastE) Then
            NumEstrAnn = strctLastE.Data.Numero
            nLastMese = Month(strctLastE.Data.Data)
            nIndiceMensile = strctLastE.Data.Numero
            nIdEstr = cArchivio.QuantitaEstrazioni

            For nAnno As Integer = Year(strctLastE.Data.Data) To Year(Now)

                Do
                    NumEstrAnn += 1
                    sLinkTmp = Replace(sLink, "[PROG]", NumEstrAnn.ToString)
                    sLinkTmp = Replace(sLinkTmp, "[ANNO]", nAnno.ToString)
                    ListBox1.Items.Add(sLinkTmp)
                    ListBox1.SelectedIndex = ListBox1.Items.Count - 1
                    Application.DoEvents()

                    w.Naviga("abaut:blank")
                    w.Naviga(sLinkTmp)

                    If w.GetEstrazione(strctE) Then
                        nIdEstr += 1
                        If Month(strctE.Data.Data) = nLastMese Then
                            nIndiceMensile += 1
                        Else
                            nIndiceMensile = 1
                        End If
                        strctE.Data.Numero = NumEstrAnn
                        strctE.Data.IndiceMensile = nIndiceMensile
                        strctE.identifier = nIdEstr

                        nLastMese = Month(strctE.Data.Data)
                        cArchivio.ScriviEstrazione(nIdEstr, strctE)
                        nAggiornate += 1
                    Else
                        Exit Do
                    End If

                Loop
                NumEstrAnn = 0


            Next

        End If

        MsgBox("Fine Estrazioni aggiornate : " & nAggiornate.ToString)

    End Sub
 

Edoardo_95

Advanced Member
sospendiamo un secondo questa finestra per accontentare chi ci chiede degli aggiornamenti

inserisci questa classe

Codice:
Option Compare Text

Public Class clsEstrMonopoli

    Private WebB As WebBrowser



    Sub New()
        WebB = New WebBrowser

    End Sub
    Public Property WebBrowser As WebBrowser
        Get
            Return WebB
        End Get
        Set(value As WebBrowser)
            WebB = value
        End Set
    End Property

    Sub Naviga(sUrl As String)


        WebB.Navigate(sUrl)
        Do While WebB.ReadyState <> WebBrowserReadyState.Complete
            Application.DoEvents()
        Loop

    End Sub



    Friend Function GetEstrazione(ByRef strctE As StrEstrazione, Optional nTentativiMax As Integer = 20) As Boolean



        Dim docAll As HtmlElementCollection = Nothing
        Dim doc As HtmlDocument
        Dim bFound As Boolean
        Dim nTentativi As Integer
        Dim nRuota As Integer, nPos As Integer
        Dim sTemp As String
        Dim nEstratto As Integer


        nRuota = 1
        strctE.DimensionaRuote()

        Do
            System.Threading.Thread.Sleep(500)
            Application.DoEvents()
            If Not IsNothing(WebB.Document) Then
                doc = WebB.Document

                For Each element In doc.All
                    If UCase(element.tagName) = "DIV" Then

                        If element.Id = "contenuti_aams" Then


                            docAll = element.All

                            Exit For
                        End If
                    End If
                Next


                If Not IsNothing(docAll) Then

                    For Each element As HtmlElement In docAll
                        If element.TagName.ToString.ToUpper = "TABLE" Then

                            If element.InnerText.Contains("Estrazione") Then
                                sTemp = element.InnerText
                                Dim i As Integer = sTemp.IndexOf(vbCrLf)
                                If i > 0 Then
                                    sTemp = sTemp.Substring(0, i)

                                    sTemp = Replace(sTemp, "n¬į", "")

                                    Dim av() As String = sTemp.Split(" ")
                                    If av.GetUpperBound(0) >= 3 Then
                                        If IsDate(av(3)) AndAlso IsNumeric(av(1)) Then
                                            strctE.Data.Data = ConvertTodate(av(3))
                                            strctE.Data.Numero = ConvertToInt(av(1))

                                            For Each cell As HtmlElement In element.All

                                                If (cell.TagName.ToString.ToUpper).Contains("TD") Then

                                                    nEstratto = ConvertToInt(cell.InnerText.Trim)
                                                    If nEstratto > 0 Then
                                                        nPos += 1
                                                        If nPos = 6 Then
                                                            nPos = 1
                                                            nRuota += 1
                                                        End If

                                                        strctE.Ruote(nRuota).SetNumero(nEstratto, nPos)
                                                    End If

                                                End If
                                            Next cell
                                        End If
                                    End If

                                    bFound = nRuota >= 10

                                End If
                            End If
                        End If

                    Next

                End If
            End If

            nTentativi += 1
            If nTentativi > nTentativiMax Then Exit Do
        Loop While bFound = False

        Return bFound

    End Function
End Class


in un form con una listbox invece metti questa sub e lanciala da un pulsante.


Codice:
    Sub AggiornaEstrazioni()

        Dim w As clsEstrMonopoli = New clsEstrMonopoli
        Dim strctLastE As StrEstrazione = New StrEstrazione
        Dim strctE As New StrEstrazione
        Dim sLink As String = "https://www.adm.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=[PROG]&anno=[ANNO]"  ' esempio  : https://www.adm.gov.it/portale/monopoli/giochi/gioco-del-lotto/lotto_g/lotto_estr?prog=142&anno=2021
        Dim sLinkTmp As String
        Dim nLastMese As Integer
        Dim nIndiceMensile As Integer
        Dim nIdEstr As Integer
        Dim nAggiornate As Integer


        Dim NumEstrAnn As Integer



        If cArchivio.GetEstrazione(cArchivio.QuantitaEstrazioni, strctLastE) Then
            NumEstrAnn = strctLastE.Data.Numero
            nLastMese = Month(strctLastE.Data.Data)
            nIndiceMensile = strctLastE.Data.Numero
            nIdEstr = cArchivio.QuantitaEstrazioni

            For nAnno As Integer = Year(strctLastE.Data.Data) To Year(Now)

                Do
                    NumEstrAnn += 1
                    sLinkTmp = Replace(sLink, "[PROG]", NumEstrAnn.ToString)
                    sLinkTmp = Replace(sLinkTmp, "[ANNO]", nAnno.ToString)
                    ListBox1.Items.Add(sLinkTmp)
                    ListBox1.SelectedIndex = ListBox1.Items.Count - 1
                    Application.DoEvents()

                    w.Naviga("abaut:blank")
                    w.Naviga(sLinkTmp)

                    If w.GetEstrazione(strctE) Then
                        nIdEstr += 1
                        If Month(strctE.Data.Data) = nLastMese Then
                            nIndiceMensile += 1
                        Else
                            nIndiceMensile = 1
                        End If
                        strctE.Data.Numero = NumEstrAnn
                        strctE.Data.IndiceMensile = nIndiceMensile
                        strctE.identifier = nIdEstr

                        nLastMese = Month(strctE.Data.Data)
                        cArchivio.ScriviEstrazione(nIdEstr, strctE)
                        nAggiornate += 1
                    Else
                        Exit Do
                    End If

                Loop
                NumEstrAnn = 0


            Next

        End If

        MsgBox("Fine Estrazioni aggiornate : " & nAggiornate.ToString)

    End Sub
Fatto
 

Edoardo_95

Advanced Member
bhe se la proprieta che vuoi mettere è nel form mdi non ha senso passare per quella variabile index archivio in quanto basta leggere la proprieta selected index delal combo

Public ReadOnly Property ArchivioPuntato As Integer
Get
Return cmbArchivio.SelectedIndex
End Get
End Property
Nemmeno così funziona....non riesco trasportare fuori dal form l'index del dell'archivio
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 18 gennaio 2022
    Bari
    76
    16
    68
    50
    18
    Cagliari
    10
    04
    90
    62
    11
    Firenze
    65
    57
    74
    77
    24
    Genova
    10
    82
    55
    43
    15
    Milano
    57
    78
    54
    81
    89
    Napoli
    54
    16
    19
    87
    58
    Palermo
    36
    48
    12
    24
    66
    Roma
    24
    23
    50
    02
    30
    Torino
    28
    43
    84
    76
    46
    Venezia
    37
    74
    29
    23
    34
    Nazionale
    63
    60
    39
    59
    35
    Estrazione Simbolotto
    Bari
    06
    39
    25
    09
    41
Alto