Ho già affrontato l'argomento ed avevo superato l'ostacolo agendo sulle procedure scatenate dai due eventi OnClick e OnDblClick.
Ora non riesco a capire come abbia potuto provocare un malfunzionamento del meccanismo costruito per l'occorrenza del Click, semplice o doppio.
Riporto qui sotto le due procedure:
. . .
var
Form2: TForm2;
statoGridDraw: TGridDrawState;
implementation
. . .
swDblClick: Boolean = False;
. . .
procedure TForm2.GridMovvClick(Sender: TObject);
begin
swDblClick:= False;
Sleep(200);//
Application.ProcessMessages;
if not swDblClick then
begin
BModifMovGridSel.Enabled:= True;
end;
end;
procedure TForm2.GridMovvDblClick(Sender: TObject);
begin
swDblClick:= True;
if (RightStr(GridMovv.Cells[3, iyCell], 12) <> 'T O T A L I ') then
begin
RidigRgMovGridSel();
end;
CBDescr.SetFocus;
end;
Riporto anche le procedure GridMovvBeforeSelection e GridMovvSelectCell
procedure TForm2.GridMovvBeforeSelection(Sender: TObject; aCol, aRow: Integer);
begin
iyCell:= aRow;
ixCell:= aCol;
if (RightStr(GridMovv.Cells[3, iyCell], 12) <> 'T O T A L I ') then
begin
Form2.GridMovv.Invalidate;
end;
end;
procedure TForm2.GridMovvSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
var
i, j, rgTotali: Integer;
begin
rgTotali:= iyCell;
if (RightStr(GridMovv.cells[3, iyCell], 12) = 'T O T A L I ') and (iyCell > 8) and (GridMovv.cells[8, iyCell] <> 'F')then
begin
GridMovv.cells[8, rgTotali]:= 'F'; // 'F': Riga Totali = Ultima riga della griglia, con Focus automatico ad ogni nuovo movimento inserito
GridMovv.Col:= 2;
GridMovv.Row:= rgTotali;
GridMovvSelectCell(self, 2, (rgTotali), canselect);
GridMovv.SetFocus;
end;
end;
Il malfunzionamento che sto rilevando ora è che, allo scatenarsi dell'evento OnClick, l'esecuzione del programma si ferma, come se avessi impostato un breakpoint alla prima riga di begin della procedura, come si può vedere dall'allegato.
Aggiungo infine che l'evento OnBeforeSelection non viene scatenato. Ho inserito sia una riga Writeln sia un breakpoint, ma, quando clicco su una cella qualsiai della GridMovv, la procedura TForm2.GridMovvBeforeSelection non succede niente, proprio come se non venisse eseguita.
Fino a due giorni fa la gestione del doppio click funzionava benissimo :-\