コードから、ラベルを作るには?

解決


keye  URL  2005-04-07 22:34:33  No: 14153  IP: 192.*.*.*

毎度毎度お世話になっています
どうかお付き合い願います

外部ファイルに合わせた数だけ、ラベルを作りたいのですが
マウスでペッたんの作り方しか知りません
プログラム内で、まぁ、そういうオブジェクトを作成できませんか?
よろしくお願いします

編集 削除
Mr.XRAY  URL  2005-04-07 23:50:58  No: 14154  IP: 192.*.*.*

以下の様なコードではどうでしょうか.
ミソというかポイントは
    (1)ALabelArray[i]:=TLabel.Create(Self);
    (2)ALabelArray[i].Parent:=Self;

の2行です.(1)でラベルを作成します.(2)でそれを,Self,つまり
このForm1にのせます.もし,パネル等にのせたい時はSelfの代わりに
Panel1などとします.
このコードではLabelをCnt:=5で,5つ作成しています.
それぞれのLabelに,いろいろ設定するには,例えば2番目なら
ALabelArray[1]:=何々;
とします(何故なら0から始まっているので).

procedure TForm1.Button1Click(Sender: TObject);
var
     i,Cnt : Integer;
     AWidth,AHeight : Integer;

     ALabelArray : array of TLabel; //ラベルを入れておく配列
begin
     Cnt:=5;
     AWidth:=100;
     AHeight:=30;
     SetLength(ALabelArray,Cnt); //ラベルを入れておく配列の大きさ決定!!(255以下に限る)
     for i:=0 to Cnt-1 do begin
       ALabelArray[i]          :=TLabel.Create(Self);
       ALabelArray[i].Parent   :=Self;
       ALabelArray[i].AutoSize :=False;
       ALabelArray[i].Alignment:=taCenter;
       ALabelArray[i].LayOut   :=tlCenter;
       ALabelArray[i].Left     :=150;
       ALabelArray[i].Width    :=AWidth;
       ALabelArray[i].Height   :=AHeight;
       ALabelArray[i].Top      :=50+(AHeight+5)*(i-1);
       ALabelArray[i].Color    :=clSilver;
       ALabelArray[i].Caption  :='Label '+IntToStr(i);
     end;
end;

編集 削除
Mr.XRAY  URL  2005-04-07 23:57:23  No: 14155  IP: 192.*.*.*

おっと間違い.
>SetLength(ALabelArray,Cnt); 

SetLength(ALabelArray,Cnt-1);
ですね.
それから,このやり方がいいという訳ではありません.
他にもやり方はありますが.とりあえずということです.
また,各ラベルをクリックした時の動作を決めるコード(イベント)の
設定は含まれていません.

編集 削除
Mr.XRAY  URL  2005-04-07 23:58:38  No: 14156  IP: 192.*.*.*

ゴメンなさい.個数を決めるのだから,
SetLength(ALabelArray,Cnt); 
でいいんでした.

編集 削除
keye  URL  2005-04-08 13:12:50  No: 14157  IP: 192.*.*.*

ありがとうございます
配列とラベルをあわせて定義できるんですね
ということは
EditArray : array of TEdit;
なんてことも可能なわけですか?

編集 削除
Mr.XRAY  URL  2005-04-08 15:24:19  No: 14158  IP: 192.*.*.*

>配列とラベルをあわせて定義できるんですね

配列を使用しなくても

var
   ALabel : TLabel;
begin
     ALabel:=TLabel.Create(Self);
       .....

というようにできますが,いくつも作成するときは配列の方が
便利ではないかと思います.
(2〜3個程度なら,Label1,Label2,Label3とかいう名前で作成しても
いいでしょう)

>EditArray : array of TEdit;

やってみて下さい.(^_^)

編集 削除
keye  URL  2005-04-09 15:44:44  No: 14159  IP: 192.*.*.*

ありがとうございます
座標とか関係あるので、配列のほうがよさそうです

> やってみて下さい.(^_^)
やってみます

編集 削除