関数の引数の渡し方

解決


イルカ  2007-11-02 20:08:32  No: 28188

関数の定義:Fon(Sender: TObject ; i: Integer);の場合,
この関数を実行するために,引数をどう渡せば良いでしょうか.

例えば,TObjectがCheckBoxで,CheckBox1と命名した場合,
Fon(Sender, 5)でも駄目ですし,Fon(TCheckBox, 5)でも駄目でした.
そもそも,Objectと変数は一緒に引数とならないでしょうかね.


igy  2007-11-02 21:45:05  No: 28189

Fon(CheckBox1, 5)
ではどうですか?


イルカ  2007-11-07 02:43:34  No: 28190

igyさん

Fon(CheckBox1,5)は駄目でした.下記のエラー出ます.

[Pascal エラー] LEDEnquete.pas(337): E2010 'TNotifyEvent' と 'procedure, untyped pointer or untyped parameter' には互換性がありません

iを変化させ,i=1の場合はFon(CheckBox1,1)を,
i=2の場合はFon(CheckBox2,2)を...実行させたいですが.


GTR  2007-11-07 03:03:10  No: 28191

これでどうでしょうか?

//チェックボックスのOn,OFF
//prmI   : CheckBox1〜nn
//prmChk : チェックのOn,Off
procedure FON(prmI,prmChk : Integer);
begin

  if prmChk = 1 Then (FindComponent( 'checkBox'+IntToStr(prmI))  as TCheckBox).Checked := True
  else               (FindComponent( 'checkBox'+IntToStr(prmI))  as TCheckBox).Checked := False;

end;

使い方

 FON(1,1);  //ChekchBox1 をチェック状態にする
 FON(5,0);  //ChekchBox5 を無チェック状態にする


Mr.XRAY  URL  2007-11-07 03:53:42  No: 28192

その FON という関数はどこでどのように定義しているのでしょうか.
ちょっと考えられないエラーですね.
以下のコードではエラーは発生しません.
動作確認環境  WindowsXP(SP2) Delphi7 Pro

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
    procedure FON(Sender: TObject ; i : Integer);
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//  Button1のクリックイベント(これはイベントです)

procedure TForm1.Button1Click(Sender: TObject);
begin
     FON(CheckBox1,1);
end;

//  自前で定義した関数(メソッド)

procedure TForm1.FON(Sender: TObject; i: Integer);
begin
//
end;

end.

>そもそも,Objectと変数は一緒に引数とならないでしょうかね.

そんな制限は全くありません.参考書やネットのコードを見て下さい.
もちろん,イベントには制限があります.イベントの引数の数と型と,その順
序は決まっていて変更できません(初心者の段階ではそう思っていて下さい).

どのイベントがどのような引数を持つかは,ヘルプで該当イベントを見れはすぐ
わかります.例えばエラーで表示された TNotifyEvent をヘルプで見ると,

procedure (Sender: TObject)

となっていて,TObject だけの引数です.


Mr.XRAY  URL  2007-11-07 04:08:05  No: 28193

>そんな制限は全くありません.参考書やネットのコードを見て下さい.

追い打ちをかけますが,こんな制限があったら,いままで公開されている
コードは全て全滅,動作していないことになります.
でも実際には,多くの場合期待通りの動作をしているのです.


HOta  2007-11-07 16:03:16  No: 28194

>[Pascal エラー] LEDEnquete.pas(337): E2010 'TNotifyEvent' と 'procedure, untyped pointer or untyped parameter' には互換性がありません

から、この引数は、イベントじゃないと駄目なんでしょう。
>Fon(Sender: TObject ; i: Integer);
が間違い?


Mr.XRAY  URL  2007-11-07 16:56:16  No: 28195

>が間違い?

ような気がしますが,コードがないので何とも...


イルカ  2007-11-08 04:03:26  No: 28196

皆さんのアドバイスありがとうございます.

質問の趣旨は下記とタブってしまいました.すいません.
https://www.petitmonte.com/bbs/answers?question_id=5200

申し訳ありませんが,一旦「解決」としておきます.


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

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






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