変数宣言を再利用するには?


まさ  2004-03-28 00:14:13  No: 7953

デルファイはじめたばかりの初心者ですので、くだらない質問かも知れませんが、教えてください。
質問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;


Mr.XRAY  URL  2004-03-28 00:42:07  No: 7954

手抜きですが,以下のURLが参考になるかも知れません.

http://wblue.web.infoseek.co.jp/prog/c00/c0503.htm#5.2.1


るるとん@K  2004-03-28 06:06:19  No: 7955

TForm1が宣言されているところとかで宣言すればどこでも使える
>質問2
function(hikisu:array of integer):integer;
とかですね
「Delphi 関数」って調べましょう


るるとん@K  2004-03-28 06:07:29  No: 7956

プロシージャって書いてありますがファンクションを使うところですね


るるとん@K  2004-03-28 06:08:46  No: 7957

http://oto.chu.jp/kujira/text/delphi/zero/12.htm
ここですね


jok  2004-03-28 09:18:08  No: 7958

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については、変数のスコープについて調べてください。


るるとん@K  2004-03-28 18:46:57  No: 7959

×「Delphi・関数」って調べましょう
◎「Delphi・引数」って調べましょう
関数調べたら引数も載ってるかな?


まさ  2004-03-29 18:05:16  No: 7960

皆さんありがとうございます!!本当にはじめたばかりで、何がなんだかわからない初心者ですが、勉強していきたいと思っておりますので、これからもよろしくお願いします。ちょっと話は変わってしまうのですが、皆さんが初心者のころに参考にしてた本や、HPなどありましたら教えていただけませんでしょうか。

本当にありがとうございました。


SOD  2004-03-29 18:21:19  No: 7961

>これは Button1 の OnClick イベントハンドラですから、TForm1 クラスの
>メソッドです。
>  〜〜〜
>これは質問に意味がよく分からないです。別の手続きで使うとき、その手続きから
>見えれば、ただ呼び出すだけです。例えば、上の TForm1.Button1Click() を
>呼び出すときは、TForm1 のメソッドから呼び出すときは、ただ

>Button1Click(self);

>のようにして呼び出すだけです。

OnClickに限らず、イベントの引数(Sender)に渡されるオブジェクトは
通常、イベントが発生したオブジェクトそのものです。
要するに、上記例において、ボタンがクリックされた場合
クリックされたボタンそのものが引数として
渡されることになります。
つまり、
  >Button1Click(self);
ではなく,
   Button1Click(Button1);
が正解です。

OnClickにより実行されるメソッドがSenderを使用しないことがわかっているのなら
特に問題はないですが、Senderを使用するのかしないのかわからない場合は
イベントが発生したオブジェクトを引数として渡しておいたほうが無難と思われます。

Senderについての規約というものがあるのかはよく知りませんが、
VCLではそのようなルールに則って実装されているようです。


jok  2004-03-29 18:29:32  No: 7962

> Senderについての規約というものがあるのかはよく知りませんが、
> VCLではそのようなルールに則って実装されているようです。

はい、そうですね。ですが、

> Button1Click(Button1);

これもおかしいですよ。これを呼び出すのが、Button1 のイベントハンドラとは
かぎりませんから。self としたのは、呼び出すイベントハンドラが具体的にわから
ないからです。nil の方がよかったですか。

> OnClickにより実行されるメソッドがSenderを使用しないことがわかっているのなら

今回の質問では最初にコードが示されています。完全ではないですが、Sender を
使っているようにはわたしには見えませんでした。


るるとん@K  2004-03-29 19:10:49  No: 7963

>参考にしてた本や、HPなどありましたら教えていただけませんでしょうか。
http://delphi.sakura.vg


まさ  2004-03-30 08:53:50  No: 7964

るるとん@Kさんありがとうございます。初心者用の本などは何冊か購入して、
読んでるんですが、専門的な言葉が出てくると、前に進めない状況でした・・・・。簡単なプログラム例を参考に、自分なりに理解して進めていきたいと思ってます。るるとん@Kさんをはじめとして、みなさんはすごいですよね。
仕事か何かで、使われてるんでしょうか。僕は趣味で勉強してるので、質問内容のレベルが低いようで、ちょっと恥かしいです。。。
そんな簡単なこと自分で解決しろよと思われてしまうかもしれませんが、すいませんが、これからも教えてください。よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加