プログラムからボタンをつくるには

解決


Troki  2004-03-03 20:26:26  No: 7545  IP: 192.*.*.*

RADツールからではなくプログラムからボタンを配置させたいのですが
宣言や実際に配置する命令はどのようにすればよいのでしょうか.

webの情報にはRADツールでの説明が多いのでわからない状態です.
どなたかよろしくお願いします.

編集 削除
jok  2004-03-03 20:48:22  No: 7546  IP: 192.*.*.*

ちょっとまえに書きました。

https://www.petitmonte.com/bbs/answers?question_id=1358

編集 削除
るるとん@K  2004-03-03 20:52:32  No: 7547  IP: 192.*.*.*

begin
with tbutton.create(self) do
begin
parent:=self//何の中にあるか
name:=mybutton1;//名前をつける
left,top,width,height,caption等設定
end;
end;

編集 削除
jok  2004-03-03 22:07:31  No: 7548  IP: 192.*.*.*

> るるとん@K さんへ

with を使うと、あとでインスタンスを参照できなくなるんでは?

> name:=mybutton1;//名前をつける

名前をつけるのはどうしてですか? それに上の文ではコンパイルできませんが。

編集 削除
Troki  2004-03-03 23:03:13  No: 7549  IP: 192.*.*.*

過去ログは調べたつもりでしたが足りなかったみたいです.
jokさんの方法で解決できそうです.
これならボタン以外のコンポーネントにも使えますね.

文中の'self'というのは知らなかったです.
一応Createとかすればいいのかな,と考えていたのですが,引数に
何を記述すればいいのかわからず困っていたのです.
ホントにありがとうございます.

編集 削除
るるとん@K  2004-03-03 23:08:39  No: 7550  IP: 192.*.*.*

上の文はサンプルソースではなく処理の流れを示したもので、
「left,top,width,height,caption等設定」
をそのままコンパイルするわけじゃありません
>名前をつけるのはどうしてですか?
作成後もボタンは使用します
showmdal等でなければ、作成したボタンをその手続き内で解放したら意味が無いのでは?
>あとでインスタンスを参照できなくなるんでは?
この場合、mybutton1で参照できるのでは?

編集 削除
るるとん@K  2004-03-03 23:16:24  No: 7551  IP: 192.*.*.*

>>名前をつけるのはどうしてですか?
>作成後もボタンは使用しますshowmdal等でなければ、作成したボタンをその手続き内で解放したら意味が無いのでは?
少し間違えました。変数を使うわけですね。
しかし特にどちらでも構わないのでは?
変数に代入するのではなく、名前を付ければ、
作成する数が決まっていない時に、
数字と組み合わせた名前を付けたりできるわけです

編集 削除
jok  2004-03-03 23:46:13  No: 7552  IP: 192.*.*.*

> この場合、mybutton1で参照できるのでは?

mybutton1 ってなんの型ですか? name に代入してるのですから string 型です
よね? string 型でどうやって TButton のオブジェクトを参照するつもりですか。

名前 name プロパティーは、単なる文字列です。これでは直接コンポーネントを
参照することはできませんよ。動的に作成したコンポーネントに名前をつけること
と、解放するとかしないとかは全く関係ありません。

例に挙げたとおり、

Button:TButton

とインスタンス変数を宣言しておき

Button := TButton.Create(self);

と代入しておくのが普通では。Name に代入した文字列だけで参照するには
FindComponent() をつかって TButton にキャストする必要があります。

編集 削除
Mr.XRAY  URL  2004-03-03 23:49:33  No: 7553  IP: 192.*.*.*

>の場合、mybutton1で参照できるのでは?

Nameはプロパティですね.NameプロパティではButtonのインスタンスは
参照できませんよ.

編集 削除
Mr.XRAY  URL  2004-03-03 23:55:57  No: 7554  IP: 192.*.*.*

>Nameはプロパティですね.NameプロパティではButtonのインスタンスは
>参照できませんよ.

jokさんが書かれている通り,キャストすれば別ですが,わざわざ
そんなことしなくても...  ねっ.

編集 削除
 2004-03-04 12:23:43  No: 7555  IP: 192.*.*.*

TButton(mybutton1)

編集 削除
つっか  2004-03-04 13:16:03  No: 7556  IP: 192.*.*.*

文字列を TButton でキャストですか? 
なにをしたいんでしょうか?

編集 削除
jok  2004-03-04 13:36:18  No: 7557  IP: 192.*.*.*

えと、コンポーネントパレットからフォームにポトペタで生成されるコンポーネント
の場合は、IDE が自動的に名前をつけてくれます。この名前の文字列と、オブジェクト
参照の変数名が一致しているので、OOP を理解していない初心者は、Name プロパティー
とオブジェクト参照を混同します。るるとん@K さんのケースはこの典型例です。
♪ さんのは全く意味不明です。

編集 削除