Newsgroup: it.comp.lang.vo-clipper
Titolo: VO: Databrowser Dispatch, intercettamento tasti

Scusate, lo so, sono un anacronistico programmatore fallito, non saprei
neanche programmare una radiosveglia e chi più ne ha più ne metta...
... ma mi domando:
"Se i miei clienti vogliono che il mio programma in VO si comporti in
modo simile alla versione in Clipper (non li biasimo!),
se devo sostituire la Tbrowse che tante soddisfazioni mi ha dato e
attualmente permette agli utenti di ricercare per chiavi alternative
all'interno di archivi grandi e incasinati il record desiderato
rapidamente, nella DataBrowser Class  mi ci trovo una carenza
"FONDAMENTALE".
In due righe come si comporta la tbrowse in clipper:
- in un archivio (esempio clienti) ho 3 indicizzazioni codice, ragione
sociale, partita iva.
Apro la tbrowse e spostandomi con i tasti cursore tra le colonne
l'ordinamento cambia automaticamente
(se sono su rag_cli si ordina per rag_cli, se sono sulla colonna Piva si
ordina per Partita Iva) Semplice anzi semplicissimo.
Se premo i tasti di navigazione mi sposto,
se premo un tasto compreso tra A-Z o tra a-z o tra 0-9 ( funzione di 1
riga) mentre solo su una colonna indicizzata mi si apre una
SingleLineEdit sopra l'header della colonna e mano a mano che digito
lettere o numeri mi appare la stringa di ricerca che sto digitando.
Se premo "INVIO" faccio un DBSEEK(cRicerca) e il gioco è fatto.
Banalissimo.
Ho capito da più persone che l'unico modo di risolvere questo problema
in VO è di usare il metodo DISPATCH.
Qui sotto riporto l'istruzione che mi piacerebbe da dare a bere al
compilatore senza che si incazzi:
METHOD Dispatch( oEvent ) CLASS Clienti_DataBrowser
  LOCAL dwcode        AS DWORD
  LOCAL dwparam       AS DWORD
  LOCAL cOrder        AS USUAL
  LOCAL symname       AS SYMBOL
  LOCAL vtotale := 0 AS LONGINT
  LOCAL vprezzo := 0 AS LONGINT
  LOCAL vquanti := 0 AS LONGINT
  LOCAL vsconto := 0 AS LONGINT
  LOCAL cdocum AS STRING
  dwCode  := HiWord(oEvent:wParam)
  DO CASE
        CASE dwCode == CN_TAB     // Premuto il tasto TAB
        CASE dwCode == CN_ENTER   // Premuto il tasto ENTER
                    IF LEN(cRicerca) > 0 .AND. SeiSuColonnaIndicizzata
                        self:server:Seek(cRicerca)
                     ENDIF
        CASE dwCode == CN_Lettera .OR. dwCode == CN_Numero  // inventato
da me  **
                  cRicerca := cRicerca + CHR(dwCode)
                    // qui visualizzo la chiave di ricerca che sto
digitando sull'header
     OTHERWISE
  ENDCASE
  RETURN SUPER:Dispatch(oEvent)
** Non riesco a capire come fare per intercettare il tasto premuto e far
capire al Dispatch che si tratta di una lettera o di un numero
Mi basta solo questo per poter andare avanti.
Io vi ringrazio e Vi prego: "AIUTATEMI!"

Caro Marco :
Io ho avuto un problema simile:
In una applicazione per la gestione Alberghi avevo un browser in una
finestra le cui colonne erano le singole camere e i record i giorni
dell'anno. Queste colonne so coloravano a seconda di cio' che trovavano
scritto nel campo in quel record (giorno) "P" per prenotata "O" per
occupata.  Io dovevo fare in modo che, sia quando mi spostavo lungo una
colonna e sia quando mi spostavo lungo un record (orizzontalmente) mi
venisse visualizzato il Nome di chi, in quel dato giorno in quella data
colonna, aveva prenotato la camera.     Allora... lo scorrimento dei record
(lungo una sola colonna)viene  gestito dal metodo   Notify() e lo
scorrimento del record (in senso orizzontale ) dal metodo
ColumnFocusChange().    Vedi un po' se ti puo' essere utile (fammi sapere)
Ciao
Enio