Ich erzeuge folgende Form mit Stringgrid:
Delphi-Quellcode:
type
TMyStringGrid = class(TStringGrid)
procedure WMSetFocus(var msg: TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus(var Msg: TMessage); message WM_KillFocus;
procedure SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);reintroduce;
procedure SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);reintroduce;
procedure DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);reintroduce;
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);reintroduce;
procedure DblClick(Sender: TObject);reintroduce;
procedure GetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);reintroduce;
procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);reintroduce;
procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);reintroduce;
end;
TMyForm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private-Deklarationen }
......
public
{ Public-Deklarationen }
StringGrid1 : TMyStringGrid;
end;
var
MyForm: TMyForm;
implementation
{$R *.DFM}
procedure TMyStringGrid.WMSetFocus( VAR Msg : TWMSetFocus );
BEGIN
INHERITED;
showmessage('SetFocus');
END;
procedure TMyStringGrid.WMKillFocus( VAR Msg : TMessage );
BEGIN
INHERITED;
showmessage('KillFocus');
END;
procedure TMyForm.FormCreate(Sender: TObject);
begin
inherited;
StringGrid1 := TMyStringGrid.Create(self);
with StringGrid1 do
begin
Parent := Self;
Align := alClient;
Visible := true;
OnSelectCell := StringGrid1.SelectCell;
OnSetEditText := StringGrid1.SetEditText;
OnDrawCell := StringGrid1.DrawCell;
OnMouseMove := StringGrid1.MouseMove;
OnDblClick := StringGrid1.DblClick;
OnGetEditText := StringGrid1.GetEditText;
OnMouseUp := StringGrid1.MouseUp;
OnKeyDown := StringGrid1.KeyDown;
end;
end;
procedure TMyForm.FormDestroy(Sender: TObject);
begin
StringGrid1.Free;
inherited;
end;
.....
Das funktioniert soweit einwandfrei. Wenn ich aber einmal den InplaceEditor aktiviere
und anschliessend die Form löschen will, bekomme ich eine
Access-Violation.
Hängt das InplaceEditor-Object nicht am Stringrid und wird damit gelöscht?
Wenn ich in einer Testapp das Stringgrid normal in eine Form einfüge und dasselbe tue, funktioniert das einwandfrei. Was mache ich da noch falsch?