Problema con oBrw:bChange

Moderator: Enrico Maria Giordano

Problema con oBrw:bChange

Postby Marco Turco » Wed Apr 02, 2008 5:43 pm

Salve a tutti.

Ho creato un browse di un array che quando cambia la riga selezionata, legge alcune informazioni dal disco e me le visualizza su una sezione di dialog a destra del browse.

in pratica faccio un
oBrw:bChange:={| | MyFunction()}

Il problema è che nel caso in cui l'utente tiene premuta la freccia verso il basso o scorra rapidamente la rotellina del mouse e si hanno quindi una serie successiva di chiamate al metodo bChange il sistema va in errore eseguendo alcune operazioni di MyFunction.

Non sono riuscito a ripetere il problema ma sembrerebbe si verifichi in taluni casi quando si opera in rete.

Ho allora ideato questo sistema che esegue MyFunction solo se è passato un secondo dalla chiamata a bChange:

oBrw:bChange:={| | Wait1Second(),MyFunction()}

function Wait1Second()
local nSeconds

nSeconds:=seconds()
do while .t.
sysrefresh()
if seconds()-nSeconds>1
exit
endif
enddo

In modo tale che se l'utente continua la selezione il controllo ripassa al browse prima di eseguire MyFunction.

Il problema che rimane è che alla fine quando il cliente interrompe la selezione e finalmente passa il secondo che ho imposto vengono eseguiti tanti bAction quante solo state le righe di browse selezionato mentre io vorrei venisse eseguito solo l'ultimo bAction.

Spero di essermi spiegato. Avete qualche soluzione a riguardo ?

Grazie in anticipo
Best Regards,

Marco Turco
SOFTWARE XP LLP
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London

Re: Problema con oBrw:bChange

Postby Enrico Maria Giordano » Thu Apr 03, 2008 10:07 am

Secondo me non dovresti utilizzare bChange ma un altro evento. Ad esempio l'evento di quando viene rilasciato il tasto ma non ti so dire come accedervi.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Marco Turco » Thu Apr 03, 2008 1:26 pm

Credo di aver risolto:

..
..
aObjects[6]:bChange:={|| SelectFunc_Cons()}
...
..


Function SelectFunc_Cons()
local nSeconds

aObjects[6]:bChange:={|| nil}

nSeconds:=seconds()
do while .t.
sysrefresh()
if seconds()-nSeconds>.25
exit
endif
enddo

aObjects[6]:Disable()
..
..
..

aObjects[6]:Enable()
aObjects[6]:SetFocus()
aObjects[6]:bChange:={|| SelectFunc_Cons()}
return
Best Regards,

Marco Turco
SOFTWARE XP LLP
User avatar
Marco Turco
 
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London


Return to All products support

Who is online

Users browsing this forum: No registered users and 5 guests