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;
こんな感じ?
if Assigned(StringGrid1.Objects[0,I]) = True then
begin
StringGrid1.Objects[0,I].Free;
StringGrid1.Objects[0,I] := nil;
end;
ありがとうございます!
出来ました
ツイート | ![]() |