Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Giugno 26, 2025, 10:34:22 pm

Titolo: StringGrid.: l'Evento OnBeforeSelection NON si attiva sempre
Inserito da: petrusic - Giugno 26, 2025, 10:34:22 pm
Oggi ho incontrato una sorpresa imprevista, mquando, nella prova programma, dopo avere riempito una StringGrid coi dati riepilogativi di una serie di movimenti, ho cliccato sulla prima riga della StringGrid.

Ebbene, l'Evento OnBeforeSelection non si è attivato e cella cliccata, insieme a tutta la riga, non è stata selezionata.
Il codice interessato è il seguente:
Codice: [Seleziona]
procedure TForm4.GridPreMomBeforeSelection(Sender: TObject; aCol, aRow: Integer);
begin
  WriteLn('procedure TForm4.GridPreMomBeforeSelection');
  swGridPreMomBeforeSel:= True;
  ixCell:= aCol;  // memorizzo il n. di Colonna della casella selezionata
  iyCell:= aRow;  // memorizzo il n. di Riga della casella selezionata
  GridPreMom.Invalidate;   // estendo la selezione a tutta la riga rendendola, nel contempo NON digitabile
end;                                                                             
procedure TForm4.GridPreMomClick(Sender: TObject);
begin
      WriteLn('procedure TForm4.GridPreMomClick');     
      GridPreMomSel
end;

Dalla Console ho rilevato la mancata chiamata della procedura "TForm4.GridPreMomBeforeSelection":
Citazione
-----
procedure TForm4.GridPreMomClick
iyCell= 0
ixCell= 0
iRgMax= 8
procedure GridPreMomSel

Come si può riscontrare, la prima procedura attivata dal click sulla GridPreMom è la TForm4.GridPreMomClick, mentra avrebbe dovuto essere la TForm4.GridPreMomBeforeSelection

Non so se qualcuno della comunità ha mai vissuto esperienze come la m ia attuale.
Vorrei solo sapere se posso richiamere io, da codice, la  TForm4.GridPreMomBeforeSelection, in modo da potere ottenere le coordinate della cella cliccata.
Titolo: Re:StringGrid.: l'Evento OnBeforeSelection NON si attiva sempre
Inserito da: petrusic - Giugno 27, 2025, 09:59:15 am
l'anomalia, al click su una cella della StrinGrid, mi si manifesta solamente quando clicco sulla cella dati della 1a colonna e della 1a riga della StringGrid.
Titolo: Re:StringGrid.: l'Evento OnBeforeSelection NON si attiva sempre
Inserito da: DragoRosso - Giugno 27, 2025, 10:40:00 am
l'anomalia, al click su una cella della StrinGrid, mi si manifesta solamente quando clicco sulla cella dati della 1a colonna e della 1a riga della StringGrid.
Secondo me ciò succede solo alla prima visualizzazione. Prova a cliccare una cella della seconda riga e poi di nuovo uno della prima e vedrai che funzionerà.

Accade perchè la griglia alla partenza è predisposta con una cella "puntata" e dovrebbe essere la cella 1 sulla riga 1 (ciò la prima dopo le righe / colonne "fixed").

Quindi il primo click li non funzionerà. Se cambi cella e ritorni li invece dovrebbe lanciarti l'evento.

Non sò se ciò è effettivamente così, ma a memoria ricordo di una anomalia simile.

Ciao
Titolo: Re:StringGrid.: l'Evento OnBeforeSelection NON si attiva sempre
Inserito da: petrusic - Giugno 27, 2025, 11:13:55 am
l'anomalia, al click su una cella della StrinGrid, mi si manifesta solamente quando clicco sulla cella dati della 1a colonna e della 1a riga della StringGrid.
Secondo me ciò succede solo alla prima visualizzazione. Prova a cliccare una cella della seconda riga e poi di nuovo uno della prima e vedrai che funzionerà.
Accade perchè la griglia alla partenza è predisposta con una cella "puntata" e dovrebbe essere la cella 1 sulla riga 1 (ciò la prima dopo le righe / colonne "fixed").
Quindi il primo click li non funzionerà. Se cambi cella e ritorni li invece dovrebbe lanciarti l'evento.
Non sò se ciò è effettivamente così, ma a memoria ricordo di una anomalia simile.

Si, se cambio cella, funziona, ma se insisto a cliccare sempre sulla 1 cella dati di vertice (dopo le righe / colonne "fixed"), continua a NON funzionare. L'ho già constatato. Per non dovermi ricordare di non cliccare sulla quella cella, pensavo infatti di aggirare l'ostacolo, richiamando io la procedura GridPreMomBeforeSelection, ma mi sono bloccato per la presenza fra i parametri, del TObiect (non so cosa scriverci).

Può capitare infatti che la griglia si componga di una sola riga dati o che, debba cliccare sulla prima delle righe dati e, siccome, in teoria, non sono obbligato a fare attenzione su quale cella di una riga debba andare a cliccare, volevo liberarmi dalla costrizione  operativa di escludere dal click la prima cella della prima riga dati.

Ma mi pare di capire che stiamo parlando di un'anomalia di Lazarus, non aggirabile.
Titolo: Re:StringGrid.: l'Evento OnBeforeSelection NON si attiva sempre
Inserito da: DragoRosso - Giugno 27, 2025, 02:09:45 pm
ma mi sono bloccato per la presenza fra i parametri, del TObiect (non so cosa scriverci).

Quell'oggetto è la tua StringGrid, quindi passi l'istanza (ossia la variabile, non la classe).