Italian assegnare nomi ad oggeti con tag tramite cicli for/if

Sagenut

Expert
Licensed User
Longtime User
Io posso darci un'occhiata solo nel tardo pomeriggio.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
ho dato un'occhiata al progettino e ....

1) non riesco a mandarlo in esecuzione perchè mi dice che manca la libreria StringFunction, per favore mandamela

2) alla riga #116 hai visto cosa hai scritto ???
forse ancora non hai chiaro il concetto di oggetti, puntatori, numeri interi, eccetera

b è definito come un Button
cicla1 è un Integer

3) come posso poi provare il tutto ?? Se come dici la funzione si attiva quando arriva un messaggio UDP, come posso fare ??

4) dentro a Panel1 dovevi metterci solo i bottoni da 1 a 24, e invece hai messo anche altri bottoni, meglio che quelli in più li togli e li lasci sullo schermo principale, potrebbero creare problemi (e stessa cosa per le ListView)

5) se vuoi accedere ai bottoni con un indice (come ti avevo già detto) devi creare un array di bottoni
Nella sezione Globals aggiungi Dim bottoni(25) As Button
Su Activity_Create, dopo la riga btn.Text = btn.Tag aggiungi bottoni(btn.Tag) = oggetto

E ora, al posto di b.Color=Colors.green puoi scrivere bottoni(cicla1).Color=Colors.green

P.S.: non posso provarlo per cui probabilmente ci sono ancora modifiche da fare, fammi sapere


Sergio
 
Last edited:

iz1kbp

Member
Ciao
Per il discorso UDP serve un programma che uso io ed una interfaccia con arduino che ho sviluppato in parallelo a vb6.
comunque quella che arriva è semplicemente una stringa di 24 uno o zero piu 5 caratteri che fungono da controllo.
Esempio : 10101010101010101010101STATO
Quando sviluppavo il programma su vb6 , dato che non potevo far partire troppi IDE assieme (Arduino + vb6) per evitare crash, simulavo il tutto con una semplice stringa che veniva "mangiata" dal socket udp con semplice timer.Ma quello non è un grosso problema.
Puo essere che non abbia capito il concetto della differenza tra "oggetti" ma B è un button.... esatto...Cicla è un intero...esatto.
Clica lo uso per la scansione tramite FOR e poi per andare a scrivere nella matrice ATTIVO(CICLA1) un dato che è una stringa.....mi sembra corretto.
Sul discorso di indirizzare il BUTTON con un Intero...quello non lo so, non riesco a capirlo, infatti mi da errore.
La mia intensione è di colorare di rosso o di verde, a seconda del dato presente in attivo(CICLA1),il bottone che corrisponde a CICLA1..
Magari è una stupidata...ma non riesco a capire questo passo...scusate
Mario
 

Attachments

  • StringFunctions.jar
    6.9 KB · Views: 161
  • StringFunctions.xml
    22.3 KB · Views: 171

sirjo66

Well-Known Member
Licensed User
Longtime User
ok

hai provato le modifiche che ti ho suggerito al punto 5 ?
 

iz1kbp

Member
Sergio...avevo scritto le prove fatte in posto....me lo dava in attesa di approvazione...ora non si vede piu e si vede solo il tuo post,quello con scritto
ok
hai provato le modifiche che ti ho suggerito al punto 5

C' è qualcosa che non funziona.....

Va bhe...riscrivo
provate le modifiche al punto 5 ma da errore alla riga con >>> bottoni(btn.tag) = oggetto
java.lang.NumberFormatException: Invalid double: ""
 

sirjo66

Well-Known Member
Licensed User
Longtime User
ma l'errore te lo dà in fase di compilazione o in fase di esecuzione ?

perché quel "double" è strano, sembra che nel btn.Tag ci sia un valore double anziché un intero, controlla bene
 

iz1kbp

Member
C'era un tasto ,uno dei 4 in basso , che era rimasta legata al pannello, quindi il ciclo andava oltre la matrice impostata.Con f8 ho trovato il problema della double.
ora mi da errore in fase di compliazione alla riga

Errore nella compilazione del programma.
Descrizione dell'errore: Membro sconosciuto: color
Errore nella linea: 112
bottoni(cicla1).color=Colors.green 'coloro di rosso i tasto corrispondete
Word: color
 

sirjo66

Well-Known Member
Licensed User
Longtime User
la definizione corretta dei bottoni è
B4X:
Dim bottoni(25) As Button

---

Altra cosa: perchè utilizzi la libreria StringFunctions ?
Ti serve per avere a disposizione il Mid ?
Togli tutto e dai un'occhiata alle funzioni Substring, poi fare tutto quello che ti serve con quelle
 
Last edited:

iz1kbp

Member
B4X:
Dim bottoni(25) As String
Ciao Sergio... come indicavi tu:stringa.
B4X:
For cicla1= 24 To 1 Step -1
                rx(cicla1)=stringa.Mid(msg,cicla1,1)
                If rx(cicla1)="1" Then
                    attivo(25-cicla1)="1"
                    'bottoni(cicla1).color=Colors.green 'coloro di rosso i tasto corrispondete
                Else
                    attivo(25-cicla1)="0"
                    Dim b As Button 'inizializzo b come bottone
                    'bottoni(cicla1).Color=Colors.red 'coloro di rosso i tasto corrispondete
                End If
            Next
ora sonocommentate per poter proseguire nello sviluppo.
 

iz1kbp

Member
la definizione corretta dei bottoni è
B4X:
Dim bottoni(25) As Button
Corretta...tnx...
Altra cosa: perchè utilizzi la libreria StringFunctions ?
Ti serve per avere a disposizione il Mid ?
Togli tutto e dai un'occhiata alle funzioni Substring, poi fare tutto quello che ti serve con quelle
Ciao Sergio...la uso per comodita.
Sto sviluppando in contemporanea su VB6 e Arduino e preferisco avere una sintassi simile ai vari ide, dato che devo lavorare sulle stringe e pensare e tradurre per 3 sistemi differenti mi fa fare conti strani :)
Sto facendo le correzioni e nel frattempo proseguo nello sviluppo.
Grazie per la pazienza! ;)
 

iz1kbp

Member
OK....funziona tutto.
Vorrei ringraziare Sergio Luca ,Sagenut per la pazienza dimostrata!
Ci sono tante cose che possono essere migliorate..ma per ora va bene cosi. devo prima allineare il programma in vb6 e l'interfaccai arduino.
Se volete vedere il software e l'interfaccia, fate un salto sul mio sito a questo link
LInk progetti
e poi guardate progetti software e Hardware (intefaccia lan per pilotaggio mute).
Grazie ancora e buon proseguimento
Allego il progetto.
 

Attachments

  • XAudio_Android.zip
    7.3 KB · Views: 172

Sagenut

Expert
Licensed User
Longtime User
Oggi alla fine non ho avuto tempo di fare nulla.
Ma il buon @sirjo66 ha agito.
Bene che il progetto si è sbloccato.
 

LucaMs

Expert
Licensed User
Longtime User
Più tardi gli darò sicuramente un'occhiata "migliore", ma intanto...

il mio consiglio era di mettere i soli button in un certo panel, in questo modo avresti potuto prelevarli facilmente usando Panel1.GetAllViewsRecursive ed inserirli in un array (insomma, come ho già scritto nel mio primo post). Oppure puoi fare a mano, come suggerito da @Sagenut nel post #13.

Ho provato con il codice che è presente nelle linee indicata ma mi restituisce errore. Error occurred on line: 117 (Main)
Come detto, devo esaminare meglio il tutto; l'errore è:
B4X:
b = cicla1 ' indicizzo i bottone
1584388864501.png


I tipi di dato non corrispondono, gli oggetti non sono dello stesso tipo; infatti b è un Button e cicla1 è una Int.


P.S. Non avevo visto che ci sono altri 82 post di risposta 😄 (il tuo, col progetto allegato, era l'ultimo della pagina e non si nota facilmente che ci sono altre pagine successive).
Ok, rileggerò anche questi.
 

Attachments

  • 1584388776632.png
    1584388776632.png
    3 KB · Views: 153
Last edited:

giannimaione

Well-Known Member
Licensed User
Longtime User
continuo a non capire questa parte di codice:
B4X:
btn.Text = btn.Tag
è come spostare una moneta dalla tasca sinistra alla tasca destra del pantalone!
nel designer hai avuto la pazienza di valorizzare i TAG di tutti i Button (da 1 a 24), per poi "copiare" il contenuto della proprietà TAG nella proprietà TEXT;
a questo punto (se non mi sono perso qualcosa nei #55 post precedenti), le possibilità erano due:
a) valorizzare TEXT e/o TAG nel ciclo
B4X:
For Each oggetto As View In Panel1.GetAllViewsRecursive
.
.
.
NEXT

b) direttamente nel designer (con un dispendio di tempo e con il rischio di valorizzare due o più TAG con lo stesso valore)

ps:
per Mario:
pensavo che tu fossi un guaglione alle prime armi;
siamo quasi coetanei, ho letto il tuo CV; gran bella storia la tua;
 

iz1kbp

Member
Giannimaione....
Il progetto iniziale era molto piu "stupido ed incasinato", ogni tasto aveva la stessa funzione e le operazioni erano ripetizioni su ripetizioni,non si adattava agli schemi, ne avevo fatto 3 copie di lavoro per 3 formati schermo differenti. Mi serviva per capire se la mia idea stava in piedi, se funzionava con tutta la parte Hardware che doveva controllare.Quando ho visto che tutto andava come doveva, ho pensato di aggiustare il tiro, di rifare il tutto seguendo le classiche regole di programmazione , evitando ripetizioni di codice etc etc....
Come dici, non sono alle prima armi,di tasti ne ho schiacciati parecchi e di libri ne ho studiati altrettanti,gia dai tempi dei degli as400 ,dei WAX...per intenderci.
La mia attivita attuale gira tra ide di Vb6, Arduino ed una manciata di C (non visual) ,e bene o male la logica dei tre sistemi di sviluppo la conosco e posso dire che sono "QUASI..ripeto QUASI" sovrapponibili...al netto della sintassi.
Questo nuovo (per me) ide non lo conosco.
Anche a me pare di "spostare di posto gli addendi pur sapendo che la somma non cambia" in parecchie situazioni, ma in questo momento l'importante è capire la "nuova logica".
Personalmente ritengo che molte operazioni di indicizzazione differente siano superflue e anti produttive..ma è una mia opinione. Sicuramente la logica di chi sta siluppando questo IDE è differente , sicuramente la sua competenza è mooooolto superiore alla mia e questo sviluppo è frutto di un suo percorso molto complesso .
Per questo motivo cerco di capire partendo da cose semplici ed elementari, ma quando in 3 ambienti differenti fai una operazione,e poi nel 4 ti scontri contro un muro che pensavi non esistesse...bhe...qualche domanda viene spontanea.
Grazie comunque e buon proseguimento ;)
Mario
 

LucaMs

Expert
Licensed User
Longtime User
Pigro e, soprattutto, stanco, in questo momento...
Chissà, magari sarebbe utile usare un tipo personalizzato.
A naso, senza ricordare il tutto e tantomeno rileggendo, qualcosa come:
Type tBoh(btn As Button, State as Boolean, Crl As Int... ) <-- Crl = Color
e poi un Array o List con oggetti di questo tipo.
 
Top