Je viens d'avoir un coup d'oeil à la source de TStringGrid
. La propriété est héritée de TCustomGrid
(via TDrawGrid
et TCustomDrawGrid
), où il est défini comme
property Row: Longint read FCurrent.Y write SetRow;
comme vous le dites. SetRow
appelle FocusCell
qui appelle MoveCurrent
. Celui-ci appelle SelectCell
. Ceci est une fonction virtuelle, et même si elle est très trivial dans TCustomGrid
, où il est défini comme
function TCustomGrid.SelectCell(ACol, ARow: Longint): Boolean;
begin
Result := True;
end;
à TCustomDrawGrid
, nous avons
function TCustomDrawGrid.SelectCell(ACol, ARow: Longint): Boolean;
begin
Result := True;
if Assigned(FOnSelectCell) then FOnSelectCell(Self, ACol, ARow, Result);
end;
Par conséquent, OnSelectCell
est appelé à chaque fois que ou Col
est changé, comme Skamradt a écrit dans un commentaire.
Oui, cet événement est appelé avant que la nouvelle cellule est sélectionnée, mais nous avons
FOnSelectCell: TSelectCellEvent;
où
type
TSelectCellEvent = procedure (Sender: TObject; ACol, ARow: Longint;
var CanSelect: Boolean) of object;
ACol
et ARow
contiennent les nouvelles valeurs « à être ». Vous pouvez même interdire la modification de la cellule sélectionnée en définissant CanSelect
sur false
. Par conséquent, il n'y a pas besoin de surcharger quoi que ce soit.
(En outre, vous ne pouvez pas remplacer SetRow
car il ne virtuel. Il est possible de remplacer les membres privés et protégés, mais seulement des méthodes virtuelles peut passer outre.)
DelphiXE a un événement onSelectCell qui fait juste ce. Malheureusement, Delphi 7 n'est pas disponible pour vérifier si elle était disponible dans cette version ou non. – skamradt
TStringGrid a un événement OnSelectCell dans toutes les versions de Delphi, AFAIK. –
@Remy: En effet. Pour une chose, ce serait très étrange sinon. Deuxièmement, quand cette composante a-t-elle été mise à jour? Il a vraiment l'ancien aspect Win 9x ... –