お気に入りの作成で終了時のノードの破棄の方法は

解決


吉田  2009-06-14 23:38:42  No: 34759

よろしくお願いします。
お気に入りの作成に挑戦しています。環境はDelphi6 Personalです。
TreeViewにお気に入りの追加をして、要素をクリックすると
WebBrowserに表示させる予定です。
http://www.fhimagine.sakura.ne.jp/delphi/pointer.htm#data
を参考にして始めましたがノードの制作時のメモリーを
プログラムの終了時に破棄するにはどうしたらいいのでしょうか。
このままでは、メモリーリークを起こしています。
よろしくお願いします。

type
  PFavData = ^TFavData;  //TFavDataのポインタ型
  TFavData = record
    URL: string;        //お気に入りのURL
    FavTitle: string;   //URLのタイトル名
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
    pFav: PFavData;  //ポインタ型を宣言
    Node:TTreeNode;
begin
        New(pFav);
        pFav^.URL := 'Folder';
      Node:=TreeView1.Items.AddObjectFirst(TreeView1.Selected, 'お気に入り', pFav);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  pFav: PFavData;  //ポインタ型を宣言
  Title:string;
begin
  New(pFav);  //メモリ領域を確保
  pFav^.URL := 'http://www.yahoo.co.jp/';
  Title := 'ヤフー';
  TreeView1.Items.AddChildObject(TreeView1.Selected, Title, pFav);

  New(pFav);  //メモリ領域を確保
  pFav^.URL := 'http://www.codegear.com/jp/';
  Title := 'コードギヤー';
  TreeView1.Items.AddChildObject(TreeView1.Selected, Title, pFav);
end;

procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    Node:TTreeNode;
begin
    Node := TTreeView(Sender).GetNodeAt(X,Y);
    Label1.Caption := PFavData(Node.Data)^.URL;
end;
//削除ボタン
procedure TForm1.Button2Click(Sender: TObject); //削除ボタン
var  Node:TTreeNode;
begin
    Node := TreeView1.Selected;
    Node.Delete;
end;
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
    Dispose(Node.Data);
end;


KHE00221  2009-06-15 00:39:50  No: 34760

こうかな

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
    PFavData(Node.Data).URL := '';
    PFavData(Node.Data).FavTitle := '';
    Dispose(Node.Data);
end;


吉田  2009-06-15 01:32:30  No: 34761

KHE00221さん、有り難うございました。
見事にメモリーをクリアーしてくれます。
だいぶ悩んでいました。
有り難うございました。


吉田  2009-06-15 01:33:46  No: 34762

解決マークを忘れました。
自己レスです。すみません。


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

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






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