Gambas-it

Gambas3 => Segnalazione bug => Topic aperto da: giob1642 - 24 Luglio 2013, 18:57:17

Titolo: [esaurito]possibile bug
Inserito da: giob1642 - 24 Luglio 2013, 18:57:17
Allego stralcio di un programma, gli eventi non funzionano proprio.
Non riesco a capire se sbaglio od è un bug; fatto si è che funziona solo on mousedown(ma solo in parte).
C'e qualcuno che ha avuto lo stesso errore o sa spiegarmi il perchè.
grazie giorgio
Titolo: Re: possibile bug
Inserito da: vuott - 24 Luglio 2013, 20:14:22
Avrei voluto provare, ma ho ricevuto immediatamente questo errore:

" Cannot open database: Can't connect to MySQL server on '127.0.0.1' (111) "
Titolo: Re: possibile bug
Inserito da: giob1642 - 24 Luglio 2013, 21:37:08
aggiungo bente.txt è un file text che descrive gli errori,
*sql è un file di backup di mysql
giorgio
Titolo: Re: possibile bug
Inserito da: giob1642 - 25 Luglio 2013, 17:04:48
Riflettendo su quanto postato nei giorni scorsi ho notato quanto segue:
nel modulo B ho:  public ente as new  string[10,3]
nel fmain ho: public raps as new object[]----------Una classe di oggetti che contiene oggetti textbox e combobox
Raps la creo in runtime e pongo i risultati in una listbox posta in panel2 (i riferimenti sono relativi al prog postato nei giorni scorsi; tutti i dati  dati derivano dal database allegato.
A questo punto se faccio una scelta nella lista raps ho la necessità di stabilire quale raps.text ho scelto pertanto lancio  un on event:
raps_mousedown con la routine seguente:
Public Sub raps_mousedown()              'detta routine funziona solo con mousedown e gotgocus!!!! non capisco perche non funziona con dbllick ,change  ed altri eveni
Dim i As Integer                       
Dim cat As Object
Dim gk, a, b As String
Dim prk As New String[]
i = 0
While raps.hasfocus = False
Inc i
Wend
  cat = raps
    gk = Object.Type(cat)
    If gk = "ComboBox" Then
       a = raps.text
        Stop Event                      'in tal modo stabilisco il raps.text  scelto
                prk = C.Ascegliprogramma("A_finz", "TipoProgrammi", B.ente[i, 1])
'questo mi permette di scegliere dal datbase "A_finz"tra tutti i  "TipoProgrammi" che rispettano B.ente[i, 1] quelli che soddisfano  raps.text
    Else
      textedit1.text = i & "-" & raps.text & " textbox "
      Endif
End
detta routine non funziona in particolare da luogo ad un errore null object riferito a B.ente[i,1] che invece è una lista precedentemente riempita.
se invece escludo detta routine ed eseguo solo prk=...................................allora funziona.
nemmeno inserendo stop event l'errore non si blocca.
qualcuno sa come fare o dirmi il perchè succede ciò?
grazie 
Titolo: Re: possibile bug
Inserito da: giob1642 - 28 Luglio 2013, 12:31:59
torno a chiedere aiuto su qualcosa di strano che mi accade, la cosa e abbastanza difficile da spiegarein poche righe e perciò ho eliminato il database,spero che il prog stralcio  allegato sia comprensibile.
Personalmente non capisco  se l'errore è dovuto agli eventi  (usando observer è lo stesso)
o c'è dell'altro.
grazie giorgio

note : nel prog originale faccio uso di mysql, qui per semplificare l'ho eliminato e quindi troverete alcune variabili di comodo.
nel modulo B ho una lista B.ente[10,3] di cui uso solo i B.ente[mw,1].
In main  creo una lista di oggetti  raps as object[] di cui alcuni sono textbox altri sono combobox; con questa lista riempio il panel1, alcuni combobox  (province,comuni) contengono solo un dato in quanto non è stata ancora scelta la regione di riferimento.

come prima cosa in form.open leggo un dato per es. il 3 e lo riporto nella prima label del panel 2.
nella prima parte di raps_mousedown()  trovo quale elemeto del panel1 e stato interessato dall'evento label2, e cosi tutte le altre che sono riportate come  commenti, da errore .
non riesco a capire il perchè  la lista b.ente diventa un oggetto.
Penso che non sia un modo errato di usare gli eventi, poi ipotizzando che sia giusto come si fa a convertire il nome di un ogg in stringa?
grazie
Titolo: Re: possibile bug
Inserito da: vuott - 28 Luglio 2013, 16:55:25
Ho scaricato e provato il tuo nuovo allegato.

Appena lanciato il progetto, è stato sollevato questo errore: "Null object" alla riga:
Label3.text = "Label3" & "-" & i & "-" & b.ente[i, 1]

Il problema sollevato risiedeva nel fatto che il Modulo "B.module" era composto da una sola lettera. Infatti aggiungendo semplicemente un'altra B (BB.module) l'errore è sparito.


Per il resto, quando clicco sui ComboBox, vedo cambiare i valori nella 4a Label. Se clicco sui primi due TextBox, vedo modificare alcuni valori nella 3a e nella 4a Label.
Titolo: Re: possibile bug
Inserito da: giob1642 - 28 Luglio 2013, 17:28:42
mi sembra un errore banale, ma lo provo subito
grazie
Titolo: Re: possibile bug
Inserito da: giob1642 - 28 Luglio 2013, 17:48:05
vuott sei grande!!!!! funziona veramente, mi piacerebbe sapere come sei arrivato a tale conclusione.
In ogni caso label 4 non si dovrebbe vedere prima di attivare mousedown forse occorre fare una diversa disposizione degli enventi od usare observer, personlmente ho provato a servirmi un object cat ma sembra insesibile agli eventi. e gotfocus non è susseguente a mousedown.
grazie di nuovo
 
Titolo: Re: possibile bug
Inserito da: vuott - 28 Luglio 2013, 18:15:04
vuott sei grande!!!!! funziona veramente, mi piacerebbe sapere come sei arrivato a tale conclusione.
 

Non lo so, ho semplicemente provato il tuo progetto  ;D e risolto il banale errore del Modulo..... che poi, come hai potuto verificare in fine, tanto banale non era, poiché se quell'errore non ti fa funzionare un Modulo........ !  :hatecomputer:

Titolo: Re: possibile bug
Inserito da: giob1642 - 29 Luglio 2013, 10:25:27
Il prog. di cui hai visto lo stralcio è un prog. di una cinquantina di form ed ovviamente molte routine sono state messe in moduli dai nomi semplici B,C,D; attualmente avrò sviluppato ca 20.000 righe di codice tutto funziona bene.
Quell'errore che  hai trovato lo cerco da circa 20gg,  ho smontato mezzo gambas ma mai avrei pensato che fosse il nome di un file che uso da sei mesi.
                      Shapò  a Vuott

Spero che puoi levarmi qualche dubbio.
Sul mio prog. stralcio trovi :
public raps as object[]   
                               'con cui indico una matrice di controlli che contiene  textbox e combobox public sub raps_mousedown()
                                'in essa stabilisco il controllo che interessato dal mouse ..................
public sub raps_gotfocus()
                                'dovrebbe essete successiva a raps_mousedown() e riguardare solo il
                                 controllo scelto in raps_mousedown().
in realtà questo non avviene,molti eventi non rispondono nemmeno con observer
non mi prende per es public sub raps_change()
posso usare in questo caso un event menu e come fare?
grazie
giorgio
Titolo: Re: possibile bug
Inserito da: vuott - 29 Luglio 2013, 11:30:23
public sub raps_gotfocus()
                                'dovrebbe essete successiva a raps_mousedown() e riguardare solo il
                                 controllo scelto in raps_mousedown().

Forse non ho capito  :-\ , però a me questo avviene: nella 4a Label mostra il valore stringa coerente con il ComboBox cliccato. Se clicco in uno dei due TextBox, vedo il loro richiamo nella 3a e 4a Label.

Insomma, quell'evento viene sollevato regolarmente, mi pare.
Titolo: Re: possibile bug
Inserito da: giob1642 - 29 Luglio 2013, 16:58:32
sostituisci queste routine  nel mio prog stralcio:
Public Sub raps_MouseDown()
Dim cat As Object
Dim b, c As String
Dim prk As New String[]
Dim i As Integer

Label2.text = ""
Label3.text = ""
 
 i = 0
While raps.hasfocus = False
Inc i
Wend
mw = i
     cat = raps
     gk = Object.Type(cat)
  adk = Last.text
 Label2.text = bb.ente[i, 1] & " - " & adk 

     If gk = "TextBox" Then
       Label3.text = bb.ente[i, 1] & " - " & adk
    'prk = C.Ascegliprogramma("A_finz", "TipoProgrammi", B.ente[mw, 1])
    Endif
End
   Public Sub raps_GotFocus()
   Dim b As String
   Dim prk As New String[]
   If gk = "ComboBox" Then
       b = Last.text
   Label3.text = bb.ente[mw, 1] & " - " & adk & " - " & b
 
   
' '   If adk <> b And b <> B.ente[mw, 1] Then
'   prk = C.Ascegliprogramma("A_finz", "TipoProgrammi", B.ente[mw, 1])
' ' Endif
Endif
  End
il prog funziona ma devi convenire che è sporco mentre dovrebbe essere possibile fare prima mousedown e poi gotfocus od un evento più consono come raps[mw].change
giorgio
Titolo: Re: possibile bug
Inserito da: vuott - 30 Luglio 2013, 16:21:57
Ti segnalo la sollevazione dell'errore "Unknown symbol 'Hasfocus' in class Object[]" a questa riga:
 
Codice: gambas [Seleziona]

 While raps.Hasfocus = False


che ho eliminato così:
Codice: gambas [Seleziona]

 While Last.Hasfocus = False
Titolo: Re: possibile bug
Inserito da: giob1642 - 30 Luglio 2013, 20:36:36
Non capisco in merito a cosa, io utilizzo While raps.hasfocus = False per stabilire  qual'è l'i della matrice di controlli raps e mi pare giusta.
Quello che mi sembra formalmente scorretto è che prima uso mausedown per stabilire su quale raps[?]  ho premuto il mouse, successivamente gotfocus dovrebbe darmi la regione scelta per es Lombardia.
In realatà gambas tratta i due eventi come contemporanei  e 
 If gk = "ComboBox" Then
è solo un escamotage  sporco per rendere uno susseguente all'altro ma a mio avviso  è formalnente scorretto
 
Titolo: Re: possibile bug
Inserito da: vuott - 30 Luglio 2013, 23:38:41
Non capisco in merito a cosa, io utilizzo While raps.hasfocus = False per stabilire  qual'è l'i della matrice di controlli raps e mi pare giusta.

L'errore viene sollevato, semplicemente perché la Classe Object[ ] non possiede la proprietà ".HasFocus".


....prima uso mausedown per stabilire su quale raps[?]  ho premuto il mouse, successivamente gotfocus dovrebbe darmi la regione scelta per es Lombardia.
In realatà gambas tratta i due eventi come contemporanei....  
.....rendere uno susseguente all'altro ma a mio avviso  è formalnente scorretto
 
Per ottenere un evento da mouse successivo al .MouseDown, puoi usare l'evento .MouseUp.
Insomma, una cosa a titolo esemplificativo così:
Codice: gambas [Seleziona]

Public Sub raps_MouseUp()
  
  Print Object.Type(Last)
  
End
Titolo: Re: possibile bug
Inserito da: giob1642 - 31 Luglio 2013, 00:03:42
l'avevo già provato, sostituendolo al gotfocus e mettendo un breakpoint sul print, ma non funziona.
Forse potrebbe funzionare un menù event  collegato ad un observer ma non sono riuscito a farlo,o forse non ho dedicato il giusto  tempo al problema; sicuramente  l'applicazione degli eventi a gli  oggetti non è molto chiara.
giorgio
Titolo: Re: possibile bug
Inserito da: vuott - 31 Luglio 2013, 00:36:31
...ma non funziona.

E' strano perché l'ho modificato e funziona.


sicuramente  l'applicazione degli eventi a gli  oggetti non è molto chiara.
Non saprei... ma basta partire da un esempio base come questo:  :-\
Codice: gambas [Seleziona]

Public Sub Form_Open()

' Dichiaro le variabili come gli oggetti specifici che andrò a creare:
 Dim tx As TextLabel
 Dim bt As Button

' Creo una "TextLabel" ed un "Button", assegnandoli entrambi al Gruppo denominato "prova":
 With tx = New TextLabel(Me) As "prova"
    .X = 10
    .Y = 10
    .W = 50
    .H = 30
    .Text = "TL"
  End With
  
  With bt = New Button(Me) As "prova"
    .X = 70
    .Y = 10
    .W = 50
    .H = 30
    .Text = "BT"
  End With

End


' Gli oggetti appartenti al Gruppo "prova" hanno la capacità di sollevare questo evento da mouse:
Public Sub prova_MouseDown()
  
' Distinguo "quale" oggetto, fra quelli appartenenti al Gruppo "prova",
' ha scatenato effettivamente l'evento "MouseDown":
  Print Object.Type(Last) & " Giù"
  
End


' Gli oggetti appartenti al Gruppo "prova" hanno la capacità di sollevare questo evento da mouse:
Public Sub prova_MouseUp()
  
' Distinguo "quale" oggetto, fra quelli appartenenti al Gruppo "prova",
' ha scatenato effettivamente l'evento "MouseUp":
  Print Object.Type(Last) & " Su"
  
End
Titolo: Re: possibile bug
Inserito da: giob1642 - 31 Luglio 2013, 12:02:48
giusto se metti un button, ma se lo sostituisci con un combobox  pieno con una lista  dati subordinta al valore della label (non necessariamente) allora non funziona più
giorgio
Titolo: Re: possibile bug
Inserito da: vuott - 31 Luglio 2013, 13:48:49
Sì, hai ragione: se si è cliccato sul tastino per la scelta dei campi del ComboBox, e poi viene rilasciato il tasto del mouse, l'evento _MouseUp non è sollevabile.
In vero, anche con il ComboBox è possibile sfruttare l'evento _MouseUp, ma il puntatore del mouse deve stare all'interno del campo (item) in quel momento visibile della lista. ...insomma si deve cliccare e rilasciare il tasto del mouse stando con il suo puntatore all'interno del campo (item) del ComboBox.
Titolo: Re:[discussione esaurita] possibile bug
Inserito da: giob1642 - 31 Luglio 2013, 16:22:01
allora ho ragione bisognerebbe farsi una lista di observer e poi applicarli come menu rivedendo un pochino tutto il sistema on event per gli oggetti,  ma al momento non ho il tempo materiale per farlo.
E' stato un piacere confrontarsi con te.
giorgio
Titolo: Re:[discussione esaurita] possibile bug
Inserito da: vuott - 31 Luglio 2013, 16:32:00
allora ho ragione bisognerebbe farsi una lista di observer e poi applicarli come menu rivedendo un pochino tutto il sistema on event per gli oggetti,  ma al momento non ho il tempo materiale per farlo.
E' stato un piacere confrontarsi con te.
giorgio
Sono io che ti ringrazio per avermi spinto a confrontarmi con questo problema.

Volevo solo dire che si potrebbe sperimentare qualche sorta di stratagemma... se possibile.  :-\
Titolo: Re: [esaurito]possibile bug
Inserito da: giob1642 - 31 Luglio 2013, 20:45:45
certo che è possibile prova ne è che  quello detto il 29 luglio funziona ma è  escamotage  che si dovrebbe evitare e che io chiamo sporco.
giorgio
 
Titolo: Re: [esaurito]possibile bug
Inserito da: vuott - 31 Luglio 2013, 21:16:18
....ma è  escamotage  che si dovrebbe evitare e che io chiamo sporco.

Alzo le mani !

(http://i1248.photobucket.com/albums/hh498/DjMalik_1D/1348387353118104_animate_large_zps95ea1ed7.gif)
Titolo: Re: [esaurito]possibile bug
Inserito da: giob1642 - 01 Agosto 2013, 00:00:10
grazie per il video ma mica sei tu?
giorgio
Titolo: Re: [esaurito]possibile bug
Inserito da: vuott - 01 Agosto 2013, 01:06:19
grazie per il video ma mica sei tu?
Ti piacerebbe, eh ?   :devil:
Titolo: Re: [esaurito]possibile bug
Inserito da: vuott - 01 Agosto 2013, 15:51:34
Ad ogni modo, io credo che, se non vuoi adottare uno stratagemma (che non necessariamente deve essere ritenuto sporco), hai due possibilità:
* utilizzare l'evento _Change( ), come hai già ipotizzato tu (che andrà scritto, poiché, se si pone prima il codice di creazione/istanziazione dei TextBox rispetto a quello dei ComboBox, quell'evento non appare nella finestrina della guida in linea);
* distinguere due Gruppi: uno per i TextBox ed uno per i ComboBox.
Titolo: Re: [esaurito]possibile bug
Inserito da: giob1642 - 02 Agosto 2013, 10:06:13
scusa ma penso che non hai capito il problema.
Ogni processore esegue un elaborazione dei dati sequenziale,questo significa che se vuoi mandare in esecuzione un evento devi inviare al processore un "signal" (linux) bloccare  l'esecuzione  squenziale caricare i dati attualmente in esecuzione nello stack , far easguire  il tuo evento  quindi ricaricare i dati che avevi riposto nello stack e continure la tua elabrazione.
Gambas e prog simili risolvono il prob  così: ogni un certo tempo per es 100/1000 di secondo invia un "signal" al processore carica i  dati in elaborazione nello stack, verifica se ci sono eventi da espletare  e fa le dovute operazioni; questo può riguardare un solo componente  o ve ne possono essere diversi ...........li esegue  poi ricarica lo stack e continua l'elaborazione.
Nel caso in esame due eventi riguardano lo stesso componente e la macchina non è in grado di stabilire la consequenzialità dell'uno sull'altro e si comporta di conseguenza.
In tal caso il programatore deve supplire ad una carenza della realese e conseguente è costretto ad inventarsi qualche escamotage che a mio avviso non è formalmente ben fatto .
E' possibile, nel caso di gambas che detto problema possa risolversi con l'uso di "observer" ma io non l'ho provato anche se sarebbe interessante svilupparlo.
giorgio
Titolo: Re: [esaurito]possibile bug
Inserito da: vuott - 02 Agosto 2013, 12:37:03
scusa ma penso che non hai capito il problema.
Ogni processore esegue un elaborazione dei dati sequenziale...
Sì, certamente.
Però, mi rendo conto di non aver compreso, non solo il problema, l'ostacolo sorto, ma perfino l'obiettivo !  :-\