Aktive Celle in StringGrid ermitteln

Hallo. Ich möchte - wenn in einer ganz bestimmten Zelle etwas eingegeben wird - dass dann etwas anderes passieren soll. Also: intuitiv würde ich irgendsowas konstruieren:

if StringGrid.Cells[1,2].active = true then label1.caption:=‚Zelle 1,2‘;

aber leider funktioniert das nicht.

Wie kann ich das herausfinden, in welchem der Zellen der Benutzer gerade seine Eingaben macht?

Danke, Jens.

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