Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Nicola - Novembre 23, 2015, 11:51:33 pm

Titolo: "Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 23, 2015, 11:51:33 pm
Buona notte a tutti; ho questo problema:
presenza di StringGrid e di un oggetto Button;
al click sul Bottone si aggiunge una riga sulla StringGrid; dopo aver inserito
alcuni dati il Focus passa di nuovo al bottone, che dovrebbe aggiungere una
nuova riga alla StringGrid. Il fatto che quanto ho il comando "BtNewRow.SetFocus",
mi viene rimbalzato in automatico il focus di nuovo sulla StringGrid, presumo perchè
l'interprete lo trova giò cliccato.
C'e un metodo per azzerare lo stato del Bottone? stesso dicasi per la StringGrid.
Grazie per l'aiuto.
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: nomorelogic - Novembre 24, 2015, 12:12:49 am
buona notte ;)

non è che per caso esci dalla griglia con il tasto TAB?
magari è quello che ti sposta il focus
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 07:13:50 am
no con il mouse
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Diego1981 - Novembre 24, 2015, 10:21:12 am
buongiorno  ;D
anche io ho qualche dubbio sul TAB, mi sembrava ci fosse il modo di "paragonare" l'invio al TAB e magari nel premere il pulsante scatta il meccanismo che ti da problemi
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 10:38:28 am
Fra la griglia mi sposto da cella a cella con INVIO, poi quando arrivo alla cella all'estrema dx, premo il bottone con mouse
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Diego1981 - Novembre 24, 2015, 10:55:04 am
magari è una stupidata, ma tu dai il focus alla riga e non alla cella, forse dovresti darlo alla cella?
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 12:52:33 pm
Provo a postare un po di codice:
qua premo il bottone che mi crea una nuova riga nella stringgrid
Codice: [Seleziona]
procedure TTfInseMovConta.BtNewRowClick(Sender: TObject);
begin
  inc(NumeroRiga);
  SgMovCon.RowCount:=NumeroRiga;
  SgMovCon.SetFocus;
end;

ora il comando passa alla stringgrid

Codice: [Seleziona]
rocedure TTfInseMovConta.SgMovConEditingDone(Sender: TObject);

begin
  cl:=SgMovCon.Col;rg:=SgMovCon.Row;
  case cl of
       0: ;
       2;
       3:begin
         dato:=UpperCase(SgMovCon.Cells[cl,rg]);
         .
         .
         .
         AggiornaSaldoConto;
         if ord (MovOk.Ctp[NumeroRiga].Segno)=0 then dato:='DARE'
                                                else dato:='AVERE';
         SgMovCon.Cells[cl,rg]:=dato;
         BtNewRow.Refresh;
         BtNewRow.SetFocus;
         end;
  end;

end;
ho omesso un po' di codice dei punti 0,1,2 giusto per non far confusione
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: nomorelogic - Novembre 24, 2015, 12:58:01 pm
in "AggiornaSaldoConto" ci sono solo calcoli o lavori anche con qualche controllo?

perché richiami BtNewRow.Refresh?

Prova in alternativa con
Form1.ActiveControl := BtNewRow;
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 03:04:57 pm
per ora niente di che in "AggiornaSaldoConto" avevo messo solo uno ShowMessage; in effetti togliendolo
il problema scompare anche se non mi è chiara la motivazione logica (mia ignoranza)
BtNewRow.Refresh era una prova che avevo provato a fare, non conoscendo alla perfezione
tutte le funzioni pensavo che il Refresh "azzerasse" lo stato del button.
Non ho capito l'utilizzo di  "Form1.ActiveControl := BtNewRow;" andrebbe inserito al
posto di refresh?
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: nomorelogic - Novembre 24, 2015, 04:26:36 pm
impostare ActiveControl era una alternativa a BtNewRow.SetFocus
ho pensato che se fosse il form principale ad impostare il focus magari le cose cambiavano

per curiosità: dallo ShowMessage in AggiornaSaldoConto, uscivi con invio o col mouse?
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 04:39:46 pm
col mouse su "ok"
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: nomorelogic - Novembre 24, 2015, 05:20:35 pm
beh, fosse stato con il tasto INVIO avremmo potuto indagare ma così non so cosa dire :)
Titolo: Re:"Rimpallo" di SetFocus
Inserito da: Nicola - Novembre 24, 2015, 10:42:38 pm
Mettendo un po' di ordine su TabStop e tabOrder fra i vari elementi sembra che funzioni
correttamente; grazie a tutti per i consigli.