Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Nicola - Marzo 19, 2015, 03:36:41 pm

Titolo: StringGrid
Inserito da: Nicola - Marzo 19, 2015, 03:36:41 pm
Non trovo come determinare il numero riga selezionata al click del mouse; cioè se ho una stringgrid, al doppio click del mouse su una data riga, vorrei avere su due variabili il risultato della cella alla colonna 1,riga clickata; esempio se la stringgrid è di 5 colonne e 10 righe, se clicco sulla
riga 9 vorrei leggere il contenuto della Cella[1,9] e la variabile x dovrebbe essere 9; ho provato con
x:=StrinGrid1.Row; ma niente,
grazie per l'aiuto.
Titolo: Re:StringGrid
Inserito da: nomorelogic - Marzo 19, 2015, 04:45:23 pm
Credo che hai 2 scelte:
(1) lavorare sull'evento OnSelectCell che viene chiamato immediatamente dopo il primo del doppio click
(2) usare la proprietà Selection all'interno di OnDblClick per sapere cosa è selezionato (<- raccomandato)
Titolo: Re:StringGrid
Inserito da: brunello - Marzo 19, 2015, 05:03:42 pm
> (2) usare la proprietà Selection all'interno di OnDblClick per sapere cosa è selezionato
 (<- raccomandato)
questa non l'ho capita io di regola uso la prima, anche perchè se la griglia ha un numero di righe o di colonne superiore a quelle visualizzate sullo schermo dovrebbe riportare le coordinate delle schermo e da quelle a risalire all'effettivo contenuto della cella non vedo come fare, ciao Brunello
Titolo: Re:StringGrid
Inserito da: nomorelogic - Marzo 19, 2015, 05:44:43 pm
non vorrei dire una castroneria ma credo che nella proprietà Selection ci siano le coordinate assolute
Titolo: Re:StringGrid
Inserito da: Nicola - Marzo 19, 2015, 05:47:00 pm
Ho provato ma mi parte il showmessage continuamente  :-[
Codice: [Seleziona]
.
.

procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
  var CanSelect: Boolean);

 var col,riga:integer;
 begin
  col:=StringGrid1.Col;
  riga:=StringGrid1.Row;
  Showmessage ('Testo '+inttostr(riga));
 end;



procedure TForm1.StringGrid1EditingDone(Sender: TObject);
var col,riga:integer;
begin
 showmessage('fatto on editing done');
 col:=StringGrid1.Col;
 riga:=StringGrid1.Row;
 Showmessage ('col '+inttostr(col)+' riga '+inttostr(riga));
 Showmessage ('Testo '+StringGrid1.Cells[col,riga]);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  StringGrid1.Cells[4,4]:='Prova';
 end;
Titolo: Re:StringGrid
Inserito da: bonmario - Marzo 19, 2015, 06:19:42 pm
Faccio il copia & incolla da un progetto funzionante.
Quando faccio il "doppio click" su una riga selezionata, parte il codice qui sotto:


Codice: [Seleziona]
procedure TForm1.TabellaEsitiDblClick(Sender: TObject);
var Idx:Integer;
begin
  Idx:=TabellaEsiti.Row;

  if (Idx > 0) then begin
    if (TabellaEsiti.Cells[ColDaScar, Idx] = CstSelz) then begin
      TabellaEsiti.Cells[ColDaScar, Idx]:=CstNonSelz;
      TotFilesDaScar:=TotFilesDaScar - 1;
      TotBytesDaScar:=TotBytesDaScar - ConvertiNumero(TabellaEsiti.Cells[ColSize, Idx]);
    end else begin
      TabellaEsiti.Cells[ColDaScar, Idx]:=CstSelz;
      TotFilesDaScar:=TotFilesDaScar + 1;
      TotBytesDaScar:=TotBytesDaScar + ConvertiNumero(TabellaEsiti.Cells[ColSize, Idx]);
    end
  end;
end;


Ciao, Mario
Titolo: Re:StringGrid
Inserito da: Nicola - Marzo 19, 2015, 06:23:26 pm
Ma infatti... era tanto semplice!! grazie mille  ;D
Titolo: Re:StringGrid
Inserito da: Nicola - Marzo 20, 2015, 09:53:37 am
Altra domanda: se sono su una cella (editabile della StringGrid), inserisco un valore, premendo il tasto invio il controllo passa alla cella successiva (e va bene); se premo tab invece il controllo, esce
dalla StringGrid; c'è un modo per far si che al premere del tab il Focus passi alla cella successiva?
ho provato cosi: SgPag0.Cells[cl+1,rg].SetFocus ma mi da errore.
Titolo: Re:StringGrid
Inserito da: Antonello - Marzo 20, 2015, 10:40:42 am
Altra domanda: se sono su una cella (editabile della StringGrid), inserisco un valore, premendo il tasto invio il controllo passa alla cella successiva (e va bene); se premo tab invece il controllo, esce
dalla StringGrid; c'è un modo per far si che al premere del tab il Focus passi alla cella successiva?
Proprietà -> Options -> goTabs