掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
実行中にコントロールを増やす (ID:1158)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>>TabSheetX、MemoX としては、それぞれ10個くらいの配列変数を用意しておけばいいんじゃないかな。 >「10個」など、固定で持てば必ず破綻します。 >別の方法で動的に管理することをおすすめします。 あれっ?、TTabSheetとTMemoの配列をあらかじめ固定で確保しておいても、インスタンスがあるわけではなくて単なるポインタの配列ですから(要素数x4)バイト消費するだけですよね。 動的配列を使わなくても特に問題ないのでは? 試しにWin98で100個作成してみましたが、まだまだ破綻しませんです。(^^;; Memoに大きなファイルを読み込んだらダメですけど…(^^ゞ var Memo : array[1..100]of TMemo; // 100個で400バイト消費 TabSheet : array[1..100]of TTabSheet; // 100個で400バイト消費 //TabSheetとMemoを動的作成 procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin for i:=Low(TabSheet) to High(TabSheet) do begin if TabSheet[i] = nil then begin TabSheet[i] := TTabSheet.Create(PageControl1); with TabSheet[i] do begin PageControl := PageControl1; Name := 'TabSheet'+IntToStr(i); Caption := 'File '+IntToStr(i); Visible := True; end; PageControl1.ActivePage := TabSheet[i]; Memo[i] := TMemo.Create(TabSheet[i]); //MemoのOwnerはTabSheetとする with Memo[i] do begin Parent := TabSheet[i]; Align := alClient; Name := 'Memo'+IntToStr(i); Visible := True; end; break; end; end; end; // 表示されているTabSheetとMemoを削除 procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i:=Low(TabSheet) to High(TabSheet) do begin if TabSheet[i] = nil then continue; if TabSheet[i].Visible then begin TabSheet[i].Free; // TabSheetが所有するMemoも自動開放 TabSheet[i] := nil; break; end; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.