Newsgroup: it.comp.lang.delphi
Titolo: SetFocus automatico

Ciao a tutti,
  oggi e' il girono delle richieste "pittoresche'.
Ho la form principale con diversi controlli, trai quali due dbgrid,  tutti 
readonly tranne due edit.
Il controllo principale e' uno dei due edit che prendi l'input principale da 
uno scanner di codici a barre.
 
Se l'activecontrol e' dbgrid1, perche' sto navigando nel db, come si puo' 
fare affinche' passando un codice a barre il focus passi in automatico sul 
edit1 senza perdere i numeri letti. ??
 
Dato che il lettore di codici a barre simula la pressione dei tasti, ho 
tentato di intercettare i codici nell' onkeypress della form selezionando 
keypreview a true, ma essendo readonly l'evento non viene richiamato.
 
Altro tentativo fatto e' stato quello di renderli tutti randonly:=false e, 
in caso di pressione di un tasto, azzerrare il codice del tasto nell'evento 
onkeypress, ma in questo caso perdo parte del codice letto.
 
Qualche suggerimento??
 
Grazie
 
Ciao
 
Daniele 
 

 keypreview a true, ma essendo readonly l'evento non viene richiamato.
 
L'evento "OnKeyPress" del Form dovrebbe prescindere dallo stato di "read only" dei controlli.
 
Sei sicuro di aver gestito correttamente l'evento?
 
Prova a postare un po' di codice del tuo Form.
 
Ciao,
  Marco.
 
-- 
MARCO BREVEGLIERI (Software and Web Developer)
#Home: 
http://bit.ly/marcobreveglieri
 
#Blog: 
http://bit.ly/compilaquindiva
 

 Prova a postare un po' di codice del tuo Form.
ecco qui, non e' niente di speciale, sono all'osso !!
 
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if  Key=#27 then
  begin
    if  PannelloGriglieVisibile Then // Pannello con 2 DBgrid, se il codice 
passato e' valido si aprono le operazioni di quell'articolo
    begin
      ChiudiPannlloGriglie(sender); // Il controllo passa al bottone che 
nasconde le glriglie e imposta  i due edit a ''
    end
    else
    FineProgrammaClick(Sender);  // esco !!
    Key:=#0;
  end
  else
  begin   // E' un qualsiasi altro tasto
      If ActiveControl<>EANEdit then
      begin
          // Se sono in una delle due griglie funziona, ma perdo il primo 
carattere
          // Esempio, se il codie e' 1234567890123, il focus passa sull'edit 
dell'ean e si visualizza 234567890123
          // il numero 1 non so come recuperarlo !!!
          // Se invece sono su un edit con readonly:=true, non so perche', 
ma da qui non passa.
          ActiveControl:=EANEdit;
      end;
  end;
end;
 
In effetti il suo perche' ci starebbe anche, se e' solo in lettura, in 
teoria la tastiera non dovrebbe servire !!
Forse dovrei intercettare onkeydown ... ma va in conflitto con il concetto 
sopra indicato.
 
Buona domenica
 
Ciao
Daniele 
 

Ciao Marco,
  ho fatto qualche altra prova e, considerato che come edit uso le librerie 
tms, ho notato che l'editor non veniva invocato perche'
la prorpieta' enableeditor era settata su false.
Tuttavia, sempre lasciando readonly su true e editorenable su true, se il 
cursore si trova dopo l'ultimo carattere anche in questo caso l'evento non 
viene richiamato.
Cosi' sono passato a controllare l'evento onkeydown della form, e in questo 
modo in qualsiasi controllo sono se il controllo attivo non e' l'edit dell' 
ean, mi posiziono sopra.
 
Adesso il problema e' che nel momento in cui setto l'activecontrol sull'edit 
dell'ean, perdo il codice del tasto appena premuto.
Pensavo di aggirare il problema salvando il carattere in un variabile e poi, 
nell'oneter dell'edit leggere la variabile, se non e' vuota ('') allora 
recupero il carattere e lo metto nel testo.
 
Cosa ne dici ...... troppo rustico ??
 
Ciao e buona domenica
 
Daniele