Italian [OT DA BAR] ragazzi tutti spenti con febbre o siete al mare a scassezzare!!!

LucaMs

Expert
Licensed User
Longtime User
1678492528650.png
 

ivanomonti

Expert
Licensed User
Longtime User
ciao Ragazzi perdonate l'orario ma volevo aggiornarvi

1678829707535.png


1) sto riscrivendo l'interfaccia e ho eliminato alcune cose in quanto ho sbagliato approccio su token e costi
2) non mi piaceva la customlistview perchè non puoi controllarla in maniera semplice e questo non mi piace quindi ho creato una mia custom list view dove sparo dentro dal design quello che mi pare e gestisco tutti gli oggetti con più semplicità dagli eventi al loro contenuto
3) al momento mi limito e cerco di specializzarmi solo chatGPT e capire bene la sua struttura perchè e veramente una roba forte e che mi risolve molti casi
4) @LucaMs il tuo css non funziona con la scrollview mi indichi come eliminarla e anche colorarla come vorrei :) grazie

come si vede in questa immagine, tutto il programma gira su un pane disegnato da Design e questo renderà più semplice approccio anche su mobile, quindi ancore e altro le imposto da design e risolvo ogni cosa.

dichiaro pochissimi oggetti nel codice ma gestisco ogni oggetto


Class_Global:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private fx As JFX
    Private Pane_MiaListview As B4XView
    Private Pane_master As B4XView
    Private MiaClv As MIACustoListView2023
    Private gpt3_key As String=""
    Private  gpt3_org As String=""
End Sub

1678827459979.png


1678828196883.png


dal design creo l'intera maschera che poi carico al volo

1678827749005.png


ogni elemento ha un id che ho messo nel tag che poi mi servono per inserire valori o prendere gli stessi, non solo, tutti i oggetti hanno un solo sub unificato nella quale grazie ad id posso fargli fare quello che voglio, in questo modo se aggiungo un nuovo form continuo con lo stesso sistema senza dover scarrellare a cercare blocchi di codice su e giù.

1678828393243.png


Evento button_sub per tutti i bottoni presenti nel software:
Private Sub Button_sub_Click
   
    Dim bt As Button =  Sender
   
        If bt.Tag="id001-bt-1" Then ' open openai web
        Dim p As Pane = Pane_master ' pannello generale
        For Each n As Node In p.GetAllViewsRecursive
            If n Is TextArea Then
                If n.As(TextArea).tag = "id001-ta_1" Then n.As(TextArea).Text = ""
            End If
        Next
        End If
       
    If bt.Tag="id001-bt-2" Then ' copia contenuto  textarea_ta_1
        Dim p As Pane = Pane_master ' pannello generale
        For Each n As Node In p.GetAllViewsRecursive
            If n Is TextArea Then
                If n.As(TextArea).tag = "id001-ta_1" Then
                    fx.Clipboard.SetString(n.As(TextArea).Text)
                End If
            End If
        Next
        End If
   
        If bt.Tag="id001-bt-3" Then ' salva contenuto  textarea_ta_1
            Dim p As Pane = Pane_master ' pannello generale
            Dim title As String = ""
            Dim text As String = ""
            For Each n As Node In p.GetAllViewsRecursive ' verifico quale radio button e su true
                If n Is RadioButton Then
                    If n.As(RadioButton).Selected = True Then title=n.As(RadioButton).Text
                End If
            Next
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then
                    text=n.As(TextArea).Text
                    saveText(title,text)
                    End If
                End If
            Next
        End If
   
    If bt.Tag="id001-bt-6" Then ' apre sito  openai
        fx.ShowExternalDocument("https://auth0.openai.com/u/login/identifier?state=hKFo2SBuTWI4MUVyaFBabE9NZm1GM0R6bUdOQkR1WXJ1VHBLc6Fur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDBaLTNwSkhqQ1ZPSlFrWHBFcWhtbDVyVHV1TURHRFhWo2NpZNkgRFJpdnNubTJNdTQyVDNLT3BxZHR3QjNOWXZpSFl6d0Q")
    End If
   
End Sub

Di sicuro non ho inventato nulla di nuovo ma volevo condividerlo, attendo qualche vostro commento in merito. inoltre chartGPT passa alla versione 4 questa settimana e la cosa diventa sempre più interessante visto che tratterà testo, video, sound e image.
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
Secondo me sarebbe meglio usare un SELECT CASE per evitare di dover ciclare ogni volta tutti gli IF
B4X:
Private Sub Button_sub_Click
  
    Dim bt As Button =  Sender
    
    Select Case bt.Tag
        Case "id001-bt-1"
            Dim p As Pane = Pane_master ' pannello generale
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then n.As(TextArea).Text = ""
                End If
            Next
        
        Case "id001-bt-2"
            Dim p As Pane = Pane_master ' pannello generale
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then
                        fx.Clipboard.SetString(n.As(TextArea).Text)
                    End If
                End If
            Next
            
        Case "id001-bt-3"
            Dim p As Pane = Pane_master ' pannello generale
            Dim title As String = ""
            Dim text As String = ""
            For Each n As Node In p.GetAllViewsRecursive ' verifico quale radio button e su true
                If n Is RadioButton Then
                    If n.As(RadioButton).Selected = True Then title=n.As(RadioButton).Text
                End If
            Next
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then
                        text=n.As(TextArea).Text
                        saveText(title,text)
                    End If
                End If
            Next
            
        Case "id001-bt-6"
            fx.ShowExternalDocument("https://auth0.openai.com/u/login/identifier?state=hKFo2SBuTWI4MUVyaFBabE9NZm1GM0R6bUdOQkR1WXJ1VHBLc6Fur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDBaLTNwSkhqQ1ZPSlFrWHBFcWhtbDVyVHV1TURHRFhWo2NpZNkgRFJpdnNubTJNdTQyVDNLT3BxZHR3QjNOWXZpSFl6d0Q")
    End Select
End Sub
 

ivanomonti

Expert
Licensed User
Longtime User
Secondo me sarebbe meglio usare un SELECT CASE per evitare di dover ciclare ogni volta tutti gli IF
B4X:
Private Sub Button_sub_Click
 
    Dim bt As Button =  Sender
   
    Select Case bt.Tag
        Case "id001-bt-1"
            Dim p As Pane = Pane_master ' pannello generale
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then n.As(TextArea).Text = ""
                End If
            Next
       
        Case "id001-bt-2"
            Dim p As Pane = Pane_master ' pannello generale
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then
                        fx.Clipboard.SetString(n.As(TextArea).Text)
                    End If
                End If
            Next
           
        Case "id001-bt-3"
            Dim p As Pane = Pane_master ' pannello generale
            Dim title As String = ""
            Dim text As String = ""
            For Each n As Node In p.GetAllViewsRecursive ' verifico quale radio button e su true
                If n Is RadioButton Then
                    If n.As(RadioButton).Selected = True Then title=n.As(RadioButton).Text
                End If
            Next
            For Each n As Node In p.GetAllViewsRecursive
                If n Is TextArea Then
                    If n.As(TextArea).tag = "id001-ta_1" Then
                        text=n.As(TextArea).Text
                        saveText(title,text)
                    End If
                End If
            Next
           
        Case "id001-bt-6"
            fx.ShowExternalDocument("https://auth0.openai.com/u/login/identifier?state=hKFo2SBuTWI4MUVyaFBabE9NZm1GM0R6bUdOQkR1WXJ1VHBLc6Fur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDBaLTNwSkhqQ1ZPSlFrWHBFcWhtbDVyVHV1TURHRFhWo2NpZNkgRFJpdnNubTJNdTQyVDNLT3BxZHR3QjNOWXZpSFl6d0Q")
    End Select
End Sub
mi sto studiando un metodo più veloce ma anche questo e straordinario nello scrivere e aggiornare il tutto
 

LucaMs

Expert
Licensed User
Longtime User
2) non mi piaceva la customlistview perchè non puoi controllarla in maniera semplice e questo non mi piace quindi ho creato una mia custom list view dove sparo dentro dal design quello che mi pare e gestisco tutti gli oggetti con più semplicità dagli eventi al loro contenuto
Solo perché ti manca la pratica, altrimenti puoi farci le stesse cose che potresti fare con una ScrollView con in più il vantaggio di gestire "blocchi" (item) in modo più facile.

Comunque, creare una propria custom view può sempre essere utile (se pensi che la riutilizzerai).
 

LucaMs

Expert
Licensed User
Longtime User
come si vede in questa immagine, tutto il programma gira su un pane disegnato da Design e questo renderà più semplice approccio anche su mobile, quindi ancore e altro le imposto da design e risolvo ogni cosa.
Eh, magari. Stai creando un layout, inteso come "aspetto della pagina/sw", sulla base di quanto ti consente un PC. Quando dovrai (vorrai) passare a client mobile (smartpone/tablet) tutto dovrà cambiare.
Banale ma è ovvio che un conto è lo schermo di un PC, altro quello di un dispositivo mobile.
L'approccio "giusto ed ideale" è che la grafica sia del tutto dissociata dalla logica del sw.
Quindi, scomporre la logica del progetto in classi e progettare la grafica "a sé stante".
 

ivanomonti

Expert
Licensed User
Longtime User
Eh, magari. Stai creando un layout, inteso come "aspetto della pagina/sw", sulla base di quanto ti consente un PC. Quando dovrai (vorrai) passare a client mobile (smartpone/tablet) tutto dovrà cambiare.
Banale ma è ovvio che un conto è lo schermo di un PC, altro quello di un dispositivo mobile.
L'approccio "giusto ed ideale" è che la grafica sia del tutto dissociata dalla logica del sw.
Quindi, scomporre la logica del progetto in classi e progettare la grafica "a sé stante".

in effetti tutto il codice va senza aver bisogno di nulla perché son classi a se, basta che oggetto in questione si porti dietro un id e da li si scatenano gli eventi, in questo caso ho 4 layout che carico in modo distinto ogni layout ha i suoi oggetti che si istanziano al momento che carico i layout e richiamano il codice, ovvio che uso il ciclo wait ma non sembra che faccia pesantezza, e scrivere il codice e molto veloce
 

ivanomonti

Expert
Licensed User
Longtime User
Salve,
mi piacerebbe studiare il codice sorgente del tuo programma per imparare ad usare il b4x che non ho mai usato per qualche cosa di serio. Cosa farai del sorgente , ha in mente di venderlo come fanno altri qui nel forum?
Grazie
ti ho scritto in privato
 
Top