デルファイはじめたばかりの初心者ですので、くだらない質問かも知れませんが、教えてください。
質問1 一度procedureで宣言したものを別のprocedureで使う場合はまた
宣言しなくてはいけないのでしょうか?
質問2 質問1と似たような質問なのですが、一度procedureで宣言したAA[i]に代入された値、AA[1]=2 を別のprocedureで使いたい場合どうすればよいのでしょうか?別のprocedureで BB:=3+AA[1];のようにはできないのでしょうか。
procedure TForm1.Button1Click(Sender: TObject);
Var
i:integer;
AA: array[1..10] of integer;
for i:=1 to 10 do
begin
AA[i]:=1+i;
手抜きですが,以下のURLが参考になるかも知れません.
http://wblue.web.infoseek.co.jp/prog/c00/c0503.htm#5.2.1
TForm1が宣言されているところとかで宣言すればどこでも使える
>質問2
function(hikisu:array of integer):integer;
とかですね
「Delphi 関数」って調べましょう
プロシージャって書いてありますがファンクションを使うところですね
http://oto.chu.jp/kujira/text/delphi/zero/12.htm
ここですね
procedure TForm1.Button1Click(Sender: TObject);
これは Button1 の OnClick イベントハンドラですから、TForm1 クラスの
メソッドです。単独の関数とか手続きではありません。元質問にもどると、
Mr.XRAY さんの指摘しているように、ローカル変数、グローバル変数、フィールド
変数などの変数のスコープ(可視性)の問題と、メソッドも単なる手続き、関数
のひとつである、ということにつきます。
> 質問1 一度procedureで宣言したものを別のprocedureで使う場合はまた
> 宣言しなくてはいけないのでしょうか?
これは質問に意味がよく分からないです。別の手続きで使うとき、その手続きから
見えれば、ただ呼び出すだけです。例えば、上の TForm1.Button1Click() を
呼び出すときは、TForm1 のメソッドから呼び出すときは、ただ
Button1Click(self);
のようにして呼び出すだけです。他のフォームのメソッドから呼び出すときは、
具体的なインスタンスを参照しなければなりません。TForm2Button1Click から
呼び出すときは、uses に Unit1 を加えてから
Form1.Buttn1Click(self);
のようにして呼び出します。
質問2については、変数のスコープについて調べてください。
×「Delphi・関数」って調べましょう
◎「Delphi・引数」って調べましょう
関数調べたら引数も載ってるかな?
皆さんありがとうございます!!本当にはじめたばかりで、何がなんだかわからない初心者ですが、勉強していきたいと思っておりますので、これからもよろしくお願いします。ちょっと話は変わってしまうのですが、皆さんが初心者のころに参考にしてた本や、HPなどありましたら教えていただけませんでしょうか。
本当にありがとうございました。
>これは Button1 の OnClick イベントハンドラですから、TForm1 クラスの
>メソッドです。
> 〜〜〜
>これは質問に意味がよく分からないです。別の手続きで使うとき、その手続きから
>見えれば、ただ呼び出すだけです。例えば、上の TForm1.Button1Click() を
>呼び出すときは、TForm1 のメソッドから呼び出すときは、ただ
>Button1Click(self);
>のようにして呼び出すだけです。
OnClickに限らず、イベントの引数(Sender)に渡されるオブジェクトは
通常、イベントが発生したオブジェクトそのものです。
要するに、上記例において、ボタンがクリックされた場合
クリックされたボタンそのものが引数として
渡されることになります。
つまり、
>Button1Click(self);
ではなく,
Button1Click(Button1);
が正解です。
OnClickにより実行されるメソッドがSenderを使用しないことがわかっているのなら
特に問題はないですが、Senderを使用するのかしないのかわからない場合は
イベントが発生したオブジェクトを引数として渡しておいたほうが無難と思われます。
Senderについての規約というものがあるのかはよく知りませんが、
VCLではそのようなルールに則って実装されているようです。
> Senderについての規約というものがあるのかはよく知りませんが、
> VCLではそのようなルールに則って実装されているようです。
はい、そうですね。ですが、
> Button1Click(Button1);
これもおかしいですよ。これを呼び出すのが、Button1 のイベントハンドラとは
かぎりませんから。self としたのは、呼び出すイベントハンドラが具体的にわから
ないからです。nil の方がよかったですか。
> OnClickにより実行されるメソッドがSenderを使用しないことがわかっているのなら
今回の質問では最初にコードが示されています。完全ではないですが、Sender を
使っているようにはわたしには見えませんでした。
>参考にしてた本や、HPなどありましたら教えていただけませんでしょうか。
http://delphi.sakura.vg
るるとん@Kさんありがとうございます。初心者用の本などは何冊か購入して、
読んでるんですが、専門的な言葉が出てくると、前に進めない状況でした・・・・。簡単なプログラム例を参考に、自分なりに理解して進めていきたいと思ってます。るるとん@Kさんをはじめとして、みなさんはすごいですよね。
仕事か何かで、使われてるんでしょうか。僕は趣味で勉強してるので、質問内容のレベルが低いようで、ちょっと恥かしいです。。。
そんな簡単なこと自分で解決しろよと思われてしまうかもしれませんが、すいませんが、これからも教えてください。よろしくお願いします。
ツイート | ![]() |