Hallo.
Prinzipiell könntest du das so lösen:
Wenn eine Eingabe gemacht wurde, prüft das Grid, wie es das zu behandeln hat. Dazu gibt es das Ereignis OnSetEditText.
Darin könnte die Weiterverarbeitung der jetzt geänderten Eingabe stattfinden, z.B. durch
label1.Caption := Format(’[%d,%d] %s’,[aCol,aRow,Value]);
Jetzt wird aber leider das Ereignis auch ausgelöst, wenn man eine andere Zelle anwählt (dann wird OnSetEditText für die alte Zelle mit dem unveränderten Inhalt aufgerufen - und das willst du ja nicht). Also muß man einen kleinen Umweg machen. Deklariere einen Flag (z.B.: Show:Boolean) und setzte diesen auf FALSE, wenn ein OnSelectCell-Ereignis eintritt und auf TRUE, wenn eine Taste gedrückt wird (im OnKeyDown-Ereignis).
Bei der OnSetEditText-Behandlung gibts du dann die Meldung nur aus, wenn show=TRUE. Fertig.
Alles in allem:
(Beispiel mit „Stringgrid1“, die leern Prozeduren wurden mit einem Doppelklick im Objektinspektor auf die entsprechenden Ereignisse erzeugt)
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,ARow: Integer; const Value: String);
begin
if show then
Caption := Format(’[%d,%d] %s’,[Acol,aRow,Value]);
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; Col,Row: Integer; var CanSelect: Boolean);
begin
show := False;
end;
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
show := True;
end;
Gruß,
Jochen