Einzelnen Beitrag anzeigen

HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#1

Nach InplaceEditor kein Löschen Form (TStringGrid)

  Alt 14. Dez 2005, 07:44
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?
Hans-Peter
  Mit Zitat antworten Zitat