Problema con oBrw:bChange

Moderator: Enrico Maria Giordano

Post Reply
User avatar
Marco Turco
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London
Contact:

Problema con oBrw:bChange

Post by Marco Turco »

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
Enrico Maria Giordano
Posts: 8753
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Has thanked: 1 time
Been thanked: 4 times
Contact:

Re: Problema con oBrw:bChange

Post by Enrico Maria Giordano »

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
Marco Turco
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London
Contact:

Post by Marco Turco »

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
Post Reply