掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
添え字を使用して動的にラベルを作成するには? (ID:27541)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> (1)配列そのものを動的に作成できないのか? Delphi4 以降であれば,SetLength()が使えます。 (Delphi3 以前ならGetMem()を使用) var arLabel: array of TLabel; MaxCount: Integer; procedure TForm1.Button1Click(Sender: TObject); begin MaxCount := 必要な配列数を得る。 SetLength(arLabel, MaxCount); for i := 0 to MaxCount - 1 do // 0 から始めたほうが無難。 begin arLabel[i] := TLabel.Create(self); arLabel[i].Parent := self; arLabel[i].Left := i * 20; arLabel[i].Top := i * 20; arLabel[i].Caption := 'Label' + IntToStr(i); // (2)の質問で追加 end; end; > (2)ラベルの配列を[0..10000]とか指定したらメモリ等を圧迫しないのか? > オブジェクトの配列はポインタ(4バイト)の配列と同じなので配列を宣言しただけでメモリを圧迫することは無いでしょう。 Button1ClickでTLabel.Createした段階では考慮が必要です。 TLabelならまず心配はないでしょうが,TBitmapの配列だとBitmapのサイズによっては簡単にメモリを使い切ってしまいます。 var AvailPhys: Integer; MemoryStatus: TMemoryStatus; begin for i := 0 to MaxCount - 1 do begin // 「(2)の質問で追加」の部分 GlobalMemoryStatus(MemoryStatus); // メモリ情報を得る // 空きメモリを得る // MemoryStatus.dwAvailPhysで直接得られるはずだが,経験上信用できない。 AvailPhys := MemoryStatus.dwTotalPhys div 100 * MemoryStatus.dwMemoryLoad; // 100%使い切るのは危険, 100MBにしたのは例えばの例 if AvailPhys < 100000000 then begin MaxCount := i; Break; end; end; end; > for i := 1 to 10 do > arLabel[i].Free; // Createは昇順, Freeは降順が無難。 for i := 9 downto 0 do // Nilも必ず設定する癖をつけたほうが良い。 if Assigned(arLabel[i]) then // arLabel[i]にnilが設定されていなければ FreeAndNil(arLabel[i]); > (3)別の方法で実現できないのか? Mr.XRAYさんの回答で解決しますよね。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.