オブジェクトの開放について

解決


candy  2008-06-12 09:56:39  No: 30982

DELPHI2007を使っています。
StringGridのある列に隠し項目としてクラスを貼り付けています。
フォームを閉じるときに欠く全行に貼り付けたクラスを解放(free)しているのですが、
プログラム中、画面クリアボタンを押したときにStringGridをクリア
する処理をしていますが、そのときにもfreeをしています。
行をクリアしたとき、1行ほど残していますが、その際その残った1行は
freeをかけた状態。そのまま画面を閉じるときに再度freeがかかってしまい
ポインタエラーが発生してしまいます。

できればcloseイベントが発生したときにfreeをかける際、その行はオブジェクトが張り付いているかどうか聞きたいのですが、IsObjectという関数はないのでしょうか?

↓グリッドに貼り付けているロジック
procedure Tfrm_main.SetObjectGrid(iRow: Integer);
var
  GridData: TGridData;  ←自分で定義したオブジェクト
begin
  flgObject := true;
  GridData := TGridData.Create();
  StringGrid1.Objects[0, iRow] := GridData;
end;

↓オブジェクト開放ロジック
procedure Tfrm_main.FreeObject;
var
  i: Integer;
  str :ShortString;
begin
  for i := 1 to stgPerson.RowCount - 1 do
       if (オブジェクトが開放されていなければ)then  ←ここの判定方法
          StringGrid1.Objects[0, i].Free;

end;


KHE00221  2008-06-12 10:03:26  No: 30983

こんな感じ?

  if Assigned(StringGrid1.Objects[0,I]) = True then
  begin
    StringGrid1.Objects[0,I].Free;
    StringGrid1.Objects[0,I] := nil;
  end;


CANDY  2008-06-12 20:14:57  No: 30984

ありがとうございます!
出来ました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加