Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Top Fuel - 22 Febbraio 2012, 21:20:05

Titolo: Tombola
Inserito da: Top Fuel - 22 Febbraio 2012, 21:20:05
Ciao a tutti!
Siccome non esiste una sezione per le presentazioni (strano, perchè non la fate? :) ) lo faccio qui: mi chiamo Massimo, ho 46 anni e mi diletto in programmazione Basic. Ho cominciato nel lontano '89 con un Commodore 16 (sepolto in soffitta e dovrebbe essere ancora funzionante), erano più i reset che facevo che tutto provando cose strane ;D, poi sono passato al mitico QB 4.5 che uso tuttora ogni tanto, breve puntatina sul VB e da pochi mesi dopo il passaggio da winciof a Debian ho scoperto Gambas, e mi piace parecchio.
Dopo i convenevoli le domande: sto scrivendo una piccola applicazione per segnare e visualizzare i numeri estratti nella tombola, come si fa spesso con i proiettori nelle sagre di paese. Il programma funziona, anche se non l'ho ancora finito, ma vorrei migliorarlo. Per i 90 numeri ho usato le cifre LCD, e per ogni cifra ho scritto la sua routine per gestire il click del mouse (un lavoraccio):

PUBLIC SUB LCD2_MouseDown()
accendi(lcd2)
END

Che a seconda dello stato accende la cifra cambiando il colore di sfondo:

SUB accendi(numero AS lcdnumber)
IF numero.background = &hc0 THEN
   numero.Background = &h80ff00
   ultimo.value = numero.value
ELSE
   numero.Background = &hc0
   ultimo.value = 0
ENDIF
END

ultimo serve a far vedere l'ultimo numero estratto.
Inoltre nel menù c'è una opzione per spegnere tutti i numeri accesi in un colpo solo, ma l'unica maniera che mi è venuta in mente è questa roba:

PUBLIC SUB Azzera_Click()
LCD1.background = &hc0
LCD2.background = &hc0
LCD3.background = &hc0
.
.
.
LCD88.background = &hc0
LCD89.background = &hc0
LCD90.background = &hc0
ultimo.value = 0
END

altro lavoraccio.
Vorrei semplificare il tutto, so che c'è la possibilità di riunire tutti gli LCD in un gruppo, ma non mi è ancora chiaro in che maniera operare. Nel VB c'era la possibilità di creare array di controlli ma qui la storia è differente.
Come posso fare per stabilire dentro nel gruppo quale numero è stato cliccato e accenderlo di conseguenza?
Per Azzera_Click ho già in mente una mezza idea, vediamo se funge.
Per ora questo è tutto, ma non preoccupatevi, arriveranno altre domande. ;)
Titolo: Re: Tombola
Inserito da: milio - 22 Febbraio 2012, 22:05:49
Prova questo esempio e poi chiedimi quello che non hai capito... ovviamente si puo' fare in tanti modi, questo e' uno :)

Titolo: Re: Tombola
Inserito da: Top Fuel - 22 Febbraio 2012, 22:24:33
La routine di reset andrebbe bene se non ci fosse il problema che nel form non ci sono solo Gli LCD, ma anche una label ed un valuebox che indicano l'ultimo numero estratto, ed a questi 2 il colore di sfondo non deve essere cambiato. Perchè se ho capito bene la routine cambia il colore a tutti gli oggetti del form, giusto?
Titolo: Re: Tombola
Inserito da: milio - 22 Febbraio 2012, 23:09:46
La sub Reset va solo a processare gli Lcd... per 'scartare' uno di essi basta fare un piccolo controllo con la proprietà tag

Allego esempio (ormai programma ;) )
Titolo: Re: Tombola
Inserito da: milio - 22 Febbraio 2012, 23:13:39
A quasi dimenticavo... Benvenuto sul pianeta Gambas :)
Titolo: Re: Tombola
Inserito da: Picavbg - 22 Febbraio 2012, 23:46:06
Benvenuto!  :2birre:

La Tombola ... eh! Mi ricordo quando anch'io ho realizzato un programma sulla tombola sul Commodore Vic20. Funzionava perfettamente, ma non fu allora apprezzato dai partecipanti al gioco, perchè, senza il cartellone in cartoncino e senza il sacchetto coi numeri da estrarre a mano, aveva perso quel calore umano, necessario a rendere il gioco piacevole. Dopo tanta fatica, l'ho usato un paio di volte.
Sugli oggetti grafici di una form, organizzati in GROUP, ho aperto qualche tempo fa  questa discussione  (http://www.gambas-it.org/smf/index.php?topic=1658.msg18563#msg18563). Se puoi, dai un'occhiata, magari ti potrà essere d'aiuto.  :D
 :ciao:
Titolo: Re: Tombola
Inserito da: Top Fuel - 23 Febbraio 2012, 00:29:42
Ops, chiedo venia, non avevo letto bene il programma. :-[
Ed un problema è risolto. Domani arriverò con il resto.
Grazie del benvenuto. :ciao:
Titolo: Re: Tombola
Inserito da: Top Fuel - 23 Febbraio 2012, 17:55:10
Benvenuto!  :2birre:
Sugli oggetti grafici di una form, organizzati in GROUP, ho aperto qualche tempo fa  questa discussione  (http://www.gambas-it.org/smf/index.php?topic=1658.msg18563#msg18563). Se puoi, dai un'occhiata, magari ti potrà essere d'aiuto.  :D
 :ciao:

Un pò complicato, non ci ho capito granché. :D
Però c'è un altro problema: nella sezione delle dichiarazioni ho messo questo:

PUBLIC SUB _new()
PUBLIC serie[90] AS Byte, punta AS Byte
END

Che mi serve per tenere traccia della successione dei numeri estratti. Però quando faccio partire il programma mi da l'errore "Unexpected PUBLIC alla linea 4 in FMain.class". Stessa storia se uso STATIC. Come mai? ???
Titolo: Re: Tombola
Inserito da: milio - 23 Febbraio 2012, 19:51:23
Perché nelle Sub e Function le variabili vanno dichiarate con Dim e servono solamente all'interno della funzione.

Per dichiarare Variabili private al modulo/classe o pubbliche vanno dichiarate all'inizio del listato del codice.

Titolo: Re: Tombola
Inserito da: Top Fuel - 23 Febbraio 2012, 20:38:15
Ok, risolto anche questo. :ok:
Resta solo da risolvere (per ora) il problema degli lcd nel gruppo, ma ci lavorerò sopra.
In effetti devo dire che è un pò differente da VB e dal basic classico, anche se si basa su questo.
Titolo: Re: Tombola
Inserito da: milio - 23 Febbraio 2012, 20:54:29
Nel mio 'esempio' ho gia' raggruppato tutti gli Lcd dichiarandoli in questo modo:

Codice: [Seleziona]
For Nx = 1 TO 10
  Lcd = New LCDNumber(Row) AS "Lcd"
Next

In questo modo tutti gli eventi vengono reindirizzati dichiarandoli cosi':

Codice: [Seleziona]
Public Sub Lcd_NomeEvento

Per sapere chi ha scatenato l'evento basta utilizzare la classe Last.

Se invece i tuoi lcd li vuoi 'disegnare', allora devi inserire l'etichetta del gruppo dentro la griglia delle proprietà che ti ritrovi a destra nella cella Group (immagine allegata) e dichiarare gli eventi come sopra.

Titolo: Re: Tombola
Inserito da: Top Fuel - 23 Febbraio 2012, 21:17:42
L'interfaccia è già disegnata quasi tutta, mancano solo un paio di cose, e gli lcd sono già stati assegnati al loro gruppo, vediamo se risolvo usando questa classe LAST.
Titolo: Re: Tombola
Inserito da: Ceskho - 24 Febbraio 2012, 11:56:30
Ciao e benvenuto. Se può esserti utile io decenni fa inizia una cosa simile che, se non ricordo male, è pure funzionante....si chiama tombyla e il sorgente lo torvi qui: https://code.google.com/p/soluzionisoftware/downloads/list
Titolo: Re: Tombola
Inserito da: Picavbg - 24 Febbraio 2012, 16:52:29
Ciao e benvenuto. Se può esserti utile io decenni fa inizia una cosa simile che, se non ricordo male, è pure funzionante....si chiama tombyla e il sorgente lo torvi qui: https://code.google.com/p/soluzionisoftware/downloads/list

decenni fa... Mmmmm
Ma sbaglio o siamo solo un anno avanti rispetto al 2011, quando dicevi di essere un ragazzo che aveva superato da poco la ventina?   :rotfl:
 :ciao: :ciao:
Titolo: Re: Tombola
Inserito da: Top Fuel - 24 Febbraio 2012, 21:07:36
Ciao e benvenuto. Se può esserti utile io decenni fa inizia una cosa simile che, se non ricordo male, è pure funzionante....si chiama tombyla e il sorgente lo torvi qui: https://code.google.com/p/soluzionisoftware/downloads/list

Niente, non funziona neanche così. Boh... :-\
Ma non demordo, riuscirò a farlo funzionare prima o poi. :hatecomputer:
Titolo: Re: Tombola
Inserito da: fsurfing - 24 Febbraio 2012, 21:24:36
che cosa non funziona?

milio ti ha postato un programma bellissimo , non usi quello?
Titolo: Re: Tombola
Inserito da: milio - 24 Febbraio 2012, 23:21:04
E' che forse Top Fuel voleva far funzionare il suo.... se posti i sorgenti ci diamo un'occhiata...
Titolo: Re: Tombola
Inserito da: Top Fuel - 27 Febbraio 2012, 00:13:15
RISOLTOOO!!! Adesso funziona!  :yeah: :party:
Grande milio!!!
Se un giorno ci incontreremo segnati una birra pagata. :2birre:
Adesso però c'è il problema che la funzione per spegnere tutti i numeri:

PRIVATE SUB Azzera_Click()
DIM Obj AS Object
  FOR EACH Obj IN ME.Controls
    IF Object.Is(Obj, "LCDNumber") THEN Obj.Background = &hc0
  NEXT
punta = 0
ultimo.value = 0
END

non funziona più. :-\
Ci lavoreremo sopra.
Adesso ulteriore step: la possibilità di scegliere i colori. Preparatevi ad altre domande... ;D
Titolo: Re: Tombola
Inserito da: milio - 27 Febbraio 2012, 07:54:52
Credo che a questo punto, onde evitare equivoci, devi postare i tuoi sorgenti...
Titolo: Re: Tombola
Inserito da: Top Fuel - 27 Febbraio 2012, 22:57:16
Va bene. :)
Mancano ancora dei pezzi però, e sono rimaste dentro delle cose che ho eliminato.
E' un pò tutto da riordinare, insomma. ;D
Titolo: Re: Tombola
Inserito da: milio - 28 Febbraio 2012, 13:08:40
Codice: [Seleziona]
PRIVATE SUB Azzera_Click() 'per spegnere tutti i numeri

Questo e' un evento generato dal menù... Va dichiarato PUBLIC

Ti ho fatto un po' di cambiamenti per quanto riguarda il tener traccia dell'ultimo numero e ti ho fatto anche l'esempio per come cambiare colori...

Titolo: Re: Tombola
Inserito da: Top Fuel - 28 Febbraio 2012, 20:18:49
Me l'hai ribaltato completamente. ;D
A me bastava una cosa più semplice. :)
Grazie comunque, integrerò il tutto e poi magari lo proporrò al sito e speriamo che si degnino di pubblicarmelo. :D
Titolo: Re: Tombola
Inserito da: Top Fuel - 11 Marzo 2012, 22:11:27
X milio: rieccomi. :)
Oggi ho provato (finalmente) ad usare la tua versione del programma ma c'è un problema: non funziona...
Il form non si apre e la causa è che continua a ballare dentro a questa routine senza uscirne mai:

Citazione
PUBLIC SUB Form_Arrange()
DIM Nx AS Integer
DIM H AS Integer
   H = LCD1.H + (panel2.Padding * 2)
   panel2.H = Max(H, 60)
   Ultimo.Move(Ultimo.X, Ultimo.Y, LCD1.W, LCD1.H)
   Label1.Font.Size = 1
   DO
      INC Nx
      IF Label1.Font.Width(Label1.Text) > Label1.W THEN BREAK
      Label1.Font.Size = Nx
   LOOP
   Label1.Font.Size = Nx - 2
END
Non solo dentro il ciclo DO-LOOP ma anche all'inizio.
Adesso proverò a fare una nuova versione con un pò del mio codice unito al tuo (in pratica, un mostro ;D ).
Titolo: Re: Tombola
Inserito da: milio - 11 Marzo 2012, 22:56:11
Bho...  :-\  a me funge benissimo... prova a cambiare il font della label...
Titolo: Re: Tombola
Inserito da: Top Fuel - 12 Marzo 2012, 00:47:22
O magari sono strano io. :D
Domani comincio lavorarci su, poi se va te la faccio vedere e mi dici cosa ne pensi.
Titolo: Re: Tombola
Inserito da: Top Fuel - 22 Marzo 2012, 00:47:41
Sempre per milio: ho fatto qualche adattamento e modifica, adesso funziona come piace a me, poi per fare un pò d'ordine e raggruppare meglio le varie procedure ho provato a mettere le varie Refresh... in un modulo a parte, ma Gambas non le trova. Dove sbaglio?
Al limite riporto tutto nel FMain e morta li.
La SUB Form_Arrange per ora l'ho tolta, magari ci tornerò su più avanti.
Titolo: Re: Tombola
Inserito da: milio - 22 Marzo 2012, 23:23:50
Hai chiamato il modulo 'Colori'...
ma ho visto che hai anche una voce di menu con lo stesso nome....  :nono:

Titolo: Re: Tombola
Inserito da: Top Fuel - 24 Marzo 2012, 01:27:58
Ah già, non ci ho pensato! Picio che sono. :)
Ok, cambio nome al modulo.
Nel frattempo sto pensando ad eventuali miglioramenti, se ne trovo. :)
Titolo: Re: Tombola
Inserito da: Top Fuel - 25 Marzo 2012, 16:44:42
Alla fine ho rimesso tutto assieme e ho cancellato il modulo.
Da quello che ho capito in un modulo ci possono stare solo procedure "generiche" che non possono fare riferimento a proprietà del form e degli oggetti, visto che non me le riconosce. Giusto?
Titolo: Re: Tombola
Inserito da: md9327 - 26 Marzo 2012, 13:58:11
Essendo dinamici gli oggetti che crei, non è possibile referenziarli, a meno che tu non:

1) li renda statici
2) li passi alle funzioni dei moduli come parametri di riferimento
Titolo: Re: Tombola
Inserito da: Top Fuel - 03 Settembre 2012, 17:25:15
Riprendo questa vecchia discussione perchè nel frattempo ho rimesso mano al progettino aggiungendo un paio di cosucce, l'ultima delle quali è l'elenco dei numeri estratti.
La cosa funziona ma c'è un problema: mi serve una control che faccia a capo automatico quando arriva al bordo destro.
Label e text area non vanno bene perchè i numeri escono a destra e spariscono. Textbox non va bene perchè arrivato al bordo destro il testo si sposta a sinistra ed sparisce di li.
C'è qualcosa che possa venirmi utile?
Titolo: Re: Tombola
Inserito da: vuott - 03 Settembre 2012, 19:29:51
Label e text area non vanno bene perchè i numeri escono a destra e spariscono. Textbox non va bene perchè arrivato al bordo destro il testo si sposta a sinistra ed sparisce di li.

In che senso spariscono i numeri e sparisce il testo ?  ???
Titolo: Re: Tombola
Inserito da: milio - 03 Settembre 2012, 19:31:32
Intende dire che non c'e' un ritorno a capo automatico del testo...

In Gambas3 la TextArea ha una proprietà che si chiama Wrap... se impostata a true va a capo in automatico... bisogna vedere se in Gambas2 esiste un qualcosa di simile  :-\
Titolo: Re: Tombola
Inserito da: vuott - 03 Settembre 2012, 19:35:21
Intende dire che non c'e' un ritorno a capo automatico del testo...

In Gambas3 la TextArea ha una proprietà che si chiama Wrap... se impostata a true va a capo in automatico... bisogna vedere se in Gambas2 esiste un qualcosa di simile  :-\
Infatti io pensavo proprio alla proprietà Wrap come rimedio, e che l'avesse attivata. Supponevo che in Gambas-2 ci fosse  :-\ : ecco perché non capivo il problema da lui posto.

...va be'....
Titolo: Re: Tombola
Inserito da: milio - 03 Settembre 2012, 19:36:23
Installato G2 al volo e confermo che la proprietà c'e'....  :)
Titolo: Re: Tombola
Inserito da: vuott - 03 Settembre 2012, 19:39:33
Installato G2 al volo e confermo che la proprietà c'e'....  :)
...ed allora, caro top fuel,  milio ti ha dato la giusta soluzione.
Titolo: Re: Tombola
Inserito da: Top Fuel - 04 Settembre 2012, 15:05:14
Tanto per cambiare è sempre lui ad averla. ;D
Grazie. ;)
Edit: ho appena provato, funziona. :ok: