- PR -

【Delphi(デルファイ)】コントロール配列のつくりかた

投稿者投稿内容
CHN#
常連さん
会議室デビュー日: 2004/11/07
投稿数: 31
投稿日時: 2006-06-16 15:10
> 結局、3つのイベントを書くしかないわけですね。
> 極端な話、ボタンが100個あっても100つのイベントを書くしかないわけですか…。

方法はたくさんあります。とりあえず初心者でも使えるテクニックを紹介します。
デザイナーで該当コントロールに必要はプロパティ設定、イベントの割り当てた状態で
該当コントロールをデザイナー上でコピペしていけばいいです。
delphiではイベントもプロパティなので、すべてそっくりに複製してくれます。
その内容は dfm ファイルにあります。

追加
イベントの共有なのでイベントプロシージャは一つです
って.NETと同じですが・・

> >「コントロール」の「配列」
> 最悪これしかないですね。

これをやってもイベントの割り当てやはり自分でやる必要があります。
ただ少しだけループがしやすくなるだけです。こうしなくてもループできますがね。

[ メッセージ編集済み 編集者: CHN# 編集日時 2006-06-16 15:22 ]
うきょきょ
常連さん
会議室デビュー日: 2004/01/09
投稿数: 44
投稿日時: 2006-06-16 15:27
ここでDelphiの話を見るとは思わなかった^^;
Delphi 7以降の.NETプロジェクトなら話は別ですが。。。

みなさんおしゃられている通り、Delphiにコントロール配列はありません。
FindComponent(スペル不明)とかを使用して、TList型や配列にFindComponentで入れていくのが普通です。

というか、VB→Delphiに移行する際に、必ずぶち当たる問題ですので
googleで調べてみればいっぱい出てきます。
http://forum.nifty.com/fdelphi/faq/00115.htm
http://www2.big.or.jp/~osamu/Delphi/Tips/other.cgi#0194.txt

引用:

極端な話、ボタンが100個あっても100つのイベントを書くしかないわけですか…。


そんな事無いです。ちゃんと理解すれば問題ありません。そのため(?)のSenderですし。

ちなみに「Delphi 掲示板」でGoogleで検索してみてください。あとMLもあります。

P.S.以下独り言。
VB 6に絶望し、個人ソフトはDelphiで作ってるけど、業務でVB.NET触ったら
価値観が変わった。
Delphi 2005の.NETプロジェクト(VCL.NET)使いづらいし。使いたいとは思わないな。
VCLが完成度高すぎた。
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2006-06-16 15:28
ぽぴ王子さま、レスありがとうございます。

引用:

他の方もおっしゃっていますが、Delphi には VB6.0 で言うところの「コントロール配列」
といった概念はありません
正直言って、わしこさんの挙げていただいたページは役に立たないと思います。そのペー
ジで教えているのは「イベントプロシージャの共有」であり、コントロール配列でもなんでも
ありません。誤解を招くような書き方をしているそのページはちょっと考えモノだと思います
が、そもそもトップページからリンクされていない「死んだページ」のようなので、そういったも
のを参照すべきではないのかもしれません。


そうなのですか。
「delphi」で検索したら上の方で出てきたものですから、
まだ参考書も用意できていない段階ですからHPに頼り切っていました。

引用:

わしこさんがやりたい(と私が思っている)ことは、未記入さんの回答で十分説明されてい
ると思うのですが、それを理解できておられないようでは、そもそも掲示板で質問すること
も考えられたほうが良いかと思います(厳しいようですが)。


未記入さんの書き込みは私の書き込みとタッチの差で投稿されたもので、
入れ違いな発言になってしまっていますが、理解いたしました。

引用:

Delphi がいくら簡単だと言っても VB6.0 とは違いますので、それぞれの文法の差です
とか言語の差をもう少し勉強されてからの方が良いと考えます。


もともと、「delphiはVBに似ているよ」と言われて取り組んでしまったので、
VBに似たところを探すあまり、勘違いのまま進んでいた事に
ぽぴ王子さんのご指摘で気づくことができました。
ありがとうございます。

他のdelphiについて書かれているページを見てみましたが
「こんとろーる配列はない」というように書かれているところもありました。
しかし、「コントロール配列はない無い」と書いているページ=ダメページ で
「コントロール配列」を書いているページ=良いページ 
と思いこんでしまっており、
しかも「delphi」は「VB」に似ていると言われた事で
「コントロール配列」があるものだと信じきっていました。

見たもの聞いたことをそんまま信じてはダメですね。
正確な情報を信じるよう注意しようと思います。
ありがとうございました。
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2006-06-16 15:48
CHNさん、うきょきょさん、レスありがとうございます。

引用:

うきょきょさんの書き込み (2006-06-16 15:27) より:
みなさんおしゃられている通り、Delphiにコントロール配列はありません。
FindComponent(スペル不明)とかを使用して、TList型や配列にFindComponentで入れていくのが普通です。

というか、VB→Delphiに移行する際に、必ずぶち当たる問題ですので
googleで調べてみればいっぱい出てきます。
http://forum.nifty.com/fdelphi/faq/00115.htm
http://www2.big.or.jp/~osamu/Delphi/Tips/other.cgi#0194.txt


上のURLは以前、検索した際見ていました^^;
「ここではコントロール配列はない」と書いているのに
「コントロール配列」について書いているページもあったので意味不明でした。。。

FindComponent…勉強します。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-06-16 16:45
要するに、コントロール「の」配列と、言語仕様上の「コントロール配列」を、同じ「コントロール配列」という言葉で書いてあることで、混乱してしまうのだと思いますが。
とりあえず、あるかどうかも分からないモノを探すよりは、分かっている方法から試して、処理を実現すべきだと思います。
それがあれば処理が何十倍も速くなるとか、リソースの消費が何十分の一になるとか、大きなメリットが期待できるならともかく、大勢に影響ないでしょうし。

コントロール配列は、兄弟分のVBAにすらないので、こちらでもハマる人が多いですね。
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2006-06-19 15:03
******************
***** 解決 ******
******************
引用:

ぽぴ王子さんの書き込み (2006-06-16 14:52) より:
まずは btn1 と btn2 を選択して、オブジェクトインスペクタのイベントタブを表示
イベント一覧の中に OnClick と書かれたものがあると思うので、その中に btn3Click と入力
(コンボボックスになっているので、そこから選択することもできます)

以上のような感じでどうでしょうか。



btnClickイベントをbtn1〜btn3に「割り当てる」の意味がわかりませんでしたが、
ぽぴ王子さんの掲示してくださった上の方法で「割り当てる」ことができました!!

上の方法をとったところでコードに何の変化もみられないのに、
正常な動作(希望した動作)になったのですが…なんでですかね?

この辺もdelphiの仕様ですね。勉強します。
私の、勘違いと思い込みにも丁寧にご指摘頂いて、
みなさまありがとうございました、
CHN#
常連さん
会議室デビュー日: 2004/11/07
投稿数: 31
投稿日時: 2006-06-19 16:14
> 上の方法をとったところでコードに何の変化もみられないのに、
> 正常な動作(希望した動作)になったのですが…なんでですかね?

理屈とやり方をすべて書いたのに、まるっきりよんでいませんね。
勉強以前の問題ですね。
ま、私が批判的な書き方をしたからかもしれませんね。
良いことばかり言っていれば良い人とは限らないと思いますがね・・・
とほほ
はい、はい、邪魔ものは退散します。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2006-06-19 16:36
objectです。

かなり遅れ気味ですが、少しだけ。
>わしこさん
>上の方法をとったところでコードに何の変化もみられないのに、
>正常な動作(希望した動作)になったのですが…なんでですかね?
「コードに変化がみられない」に関しては、
===========================
1.仰られている「コード」は、
「フォームに関する処理を表している」
と思います。
2.ボタンの
「イベントプロパティへのハンドラの代入」
は、ボタンに関する処理である。
3.そのボタンに関する処理は、今回の場合
イベントハンドラへのボタンのリソースとして「シリアライズ」され、実行時は、それが、クラスライブラリにより、「デシリアライズ」されてプログラムとして動作している。
===========================
という事で、理解して頂ければ理解し易いと思います。
参考になれば幸いです。
#「CHN#」さんが書いておられるのは、上の意味だと思います。

>この辺もdelphiの仕様ですね。勉強します。
>私の、勘違いと思い込みにも丁寧にご指摘頂いて、
>みなさまありがとうございました、
「Delphi」は、「プロパティベースのコンポーネント指向言語」だと思います。
敢えて書きますが、
VBは「ソフトウエア空間のベースにはならない」と思います。
ですから、もし「VBを言語として学習する」のであれば、
例えば、他のC系の言語をキチンと学習してから、VBに向かう方が良いと私は思います。

>CHN#さん
「わしこ」さんが「VB」だけをベースとしている場合、
「CHN#」さんのヒントだけで全てを理解するのは、先ず無理だと思います。
多分、ヒントの部分は
「C系」を理解している人でも理解出来ないと思います。
少し、大目にみてあげて下さい。

スキルアップ/キャリアアップ(JOB@IT)