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
Problema con oBrw:bChange
Moderator: Enrico Maria Giordano
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
- 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
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
EMG
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
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
..
..
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
Marco Turco
SOFTWARE XP LLP