Autore Topic: [Risolto] messaggi in continuo aggiornamento  (Letto 779 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[Risolto] messaggi in continuo aggiornamento
« il: 16 Febbraio 2012, 18:55:47 »
Per comunicare lo stato di un lavoro di riorganizzazione file, vorrei comunicare all'utente il numero di record trattati fino a quel momento. Preciso che il lavoro è svolto dentro una classe chiamata dall'ultima form attiva:
Codice: [Seleziona]
RiordTbDb = NEW RiordTabDB($_TbRiord)
Ho tentato di modificare una label della form chiamante, mentre la classe chiamata sta lavorando:
Codice: [Seleziona]
Form05.Label16.text = "RIORGANIZZAZIONE TABELLe.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & i_id 
Ho ricevuto, però, al primo record trattato, il messaggio "Not enough arguments".  Ecco, non ho capito se abbia commesso un errore di sintassi o se, invece, non possa agire, dalla classe chiamata,  su un oggetto della form di partenza.
 ???
« Ultima modifica: 18 Febbraio 2012, 14:26:51 da Picavbg »
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #1 il: 16 Febbraio 2012, 19:39:02 »
direi che hai un errore di sintassi, più precisamente cè una chiamata a una funzione o classe in cui manca un argomento o cè nè uno di troppo
« Ultima modifica: 16 Febbraio 2012, 21:39:31 da fsurfing »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #2 il: 16 Febbraio 2012, 21:44:29 »
Guardando meglio l'istruzione, effettivamente, contiene un errore di sintassi:
Citazione
Form05.Label16.text = "RIORGANIZZAZIONE TABELLe.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & i_id
ma non è quello determinante quel tipo di errore, perché dopo avere sdoppiato l'istruzione precedente nelle seguenti
Codice: [Seleziona]
DIM $testmio AS String
$testmio = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & Str(i_id)
Form05.Label16.Text = $testmio
il messaggio "Not enough arguments" si è ripresentato tale e quale.
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #3 il: 16 Febbraio 2012, 21:47:07 »
ma gambas si ferma su quale riga quando ti da errore?, ricordati che è un messaggio che ti avvisa della mancanza di un argomento.
non credo che sia quella riga di codice a dare problemi, bensi qualcosa all' interno della funzione  RiordTabDB($_TbRiord)
« Ultima modifica: 16 Febbraio 2012, 21:54:48 da fsurfing »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #4 il: 17 Febbraio 2012, 08:52:07 »
La riga evidenziata subito dopo il messaggio di errore è proprio
Codice: [Seleziona]
Form05.Label16.Text = $testmio
Lo dimostra anche il fatto che inibendola il programma prosegue nel suo lavoro fino alla fine, senza altri stop.
Il suo inserimento mi sembra pratico per permettere all'utente di capire lo stato di avanzamento del lavoro di riorganizzazione tabella, perchè in codesto frangente, la label è visibile sullo schermo.
Ciao.
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #5 il: 17 Febbraio 2012, 12:45:57 »
o se, invece, non possa agire, dalla classe chiamata,  su un oggetto della form di partenza.
 ???

Ciao Picavbg, il tuo messaggio mi ha incuriosito, ed ho provato a fare qualcosa di analogo, convinto però dell'impossibilità di agire direttamente da una classe sull'oggetto di un'altra classe. Nel Form principale ho piazzato una Label ed in una classe secondaria ho inserito all'interno di una routine (chiamata dalla classe principale) un richiamo diretto appunto alla Label presente nel FMain:
Codice: [Seleziona]
  FMain.Label1.Text = "Prova"

su questa riga della classe secondaria (che appunto richiama la Label di FMain) mi dà questo avviso di errore:
Unknown Symbol 'Label1' in class FMain.

Io lavoro con Gambas 3: che sia una risposta analoga alla tua "Not enough arguments" ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #6 il: 17 Febbraio 2012, 17:15:01 »
Ciao Picavbg, il tuo messaggio mi ha incuriosito, ed ho provato a fare qualcosa di analogo, convinto però dell'impossibilità di agire direttamente da una classe sull'oggetto di un'altra classe. Nel Form principale ho piazzato una Label ed in una classe secondaria ho inserito all'interno di una routine (chiamata dalla classe principale) un richiamo diretto appunto alla Label presente nel FMain:
Codice: [Seleziona]
  FMain.Label1.Text = "Prova"

su questa riga della classe secondaria (che appunto richiama la Label di FMain) mi dà questo avviso di errore:
Unknown Symbol 'Label1' in class FMain.

Io lavoro con Gambas 3: che sia una risposta analoga alla tua "Not enough arguments" ?

Non conosco G3 e perciò non sono in grado di dirti se le risposte siano o meno analoghe. Posso dirti, che dopo la lettura della tua risposta, ho fatto alcune prove con modifiche ad hoc:
Prova n.1:
Codice: [Seleziona]
Form05.form.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & 
Messaggio di Errore --> Unknown Symbol 'form' in class Form05

Prova n.2:
DIM Frm5 AS Form05
Codice: [Seleziona]
Frm5.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & 
Messaggio di Errore --> Null Object

Prova n.3:
DIM Frm5 AS Form05
Codice: [Seleziona]
Frm5.form.Label16.Text = "RIORGANIZZAZIONE TABELLE.DB" & Chr(10) & "------------ in corso ----------" & Chr(10) & Chr(10) & "ultimo trattato = n." & 
Messaggio di Errore --> Null Object

Comunque, se ho pensato ad utlizzare come interfaccia di messaggistica, una Label della Form ancora visibile sullo schermo, è perchè ho già utilizzato detto metodo, ma relativamente a campi-dati contenuti nella formxx.class, come puoi rilevare dall'esempio seguente:
Codice: [Seleziona]
 FMain.$_SceltOper = "NoMenu"
Probabilmente posso farlo per un campo-dati della classe, ma non per una proprietà di un oggetto della form corrispondente.
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #7 il: 17 Febbraio 2012, 17:35:36 »
ho provato a fare una prova, ma a me funziona correttamente , non son sicuro che sia la tua stessa situazione però. provala

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #8 il: 17 Febbraio 2012, 18:54:33 »
ho provato a fare una prova, ma a me funziona correttamente

...funziona anche a me, fsurfing !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #9 il: 18 Febbraio 2012, 11:07:35 »
ho provato a fare una prova, ma a me funziona correttamente , non son sicuro che sia la tua stessa situazione però. provala
Magnifica prova! Ho guardato con attenzione, dopo avere anche eseguito il programmino di prova che hai  allegato prima ed ho capito perchè a me non funzionava. Ho apportato quindi le dovute modifiche al mio programma e, finalmente, il contatore trattamenti ha cominciato a girare proprio come desideravo.
Il tuo esempio ha calzato perfettamente ed ho capito le correzioni da apportare dopo essermi soffermato sulle seguenti due istruzioni:
Codice: [Seleziona]
FMain.Label2.Text = i
FMain.nuovoform.Label2.Text = i
Infatti la prima va a modificare una label della Form FMain ed è il modello di scrittura già a me noto; la seconda include un nuovo parametro, quello della citazione della Form principale e di tutte le sue Form dipendenti, che altrimenti non potrebbero essere raggiunte, in fase di esecuzione, da Gambas, perchè non le può riconoscere. Rappresenta in definitiva una sorta di percorso sulle Form "parent" del programma fino ad arrivare a quella contenente l'oggetto su cui intervenire.
Grazie per il suggerimento, ma soprattutto per il tempo che mi hai dedicato per tirare fuori, attraverso l'esempio pratico, una logica implicita, alla quale non avevo assolutamente pensato. :yeah:
 :2birre:  :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: messaggi in continuo aggiornamento
« Risposta #10 il: 18 Febbraio 2012, 13:28:04 »
Magnifica prova!

San fsurfing  :angel: , ora pro nobis !
 :ciao:


Intanto San fsurfing, da me invocato, m'è venuto in sogno  :sleepy: e mi ha svelato l'arcano:
" Fratello, per raggiungere direttamente gli oggetti di fmain da una classe secondaria bisogna attivare l'opzione  "i controlli dei form sono public" nella proprietà del progetto ! "

Moooolto bene ! Dono un ex voto a San fsurfing !  :angel:
« Ultima modifica: 04 Marzo 2012, 23:49:33 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »