関数の定義:Fon(Sender: TObject ; i: Integer);の場合,
この関数を実行するために,引数をどう渡せば良いでしょうか.
例えば,TObjectがCheckBoxで,CheckBox1と命名した場合,
Fon(Sender, 5)でも駄目ですし,Fon(TCheckBox, 5)でも駄目でした.
そもそも,Objectと変数は一緒に引数とならないでしょうかね.
Fon(CheckBox1, 5)
ではどうですか?
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)を...実行させたいですが.
これでどうでしょうか?
//チェックボックスの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 を無チェック状態にする
その 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 だけの引数です.
>そんな制限は全くありません.参考書やネットのコードを見て下さい.
追い打ちをかけますが,こんな制限があったら,いままで公開されている
コードは全て全滅,動作していないことになります.
でも実際には,多くの場合期待通りの動作をしているのです.
>[Pascal エラー] LEDEnquete.pas(337): E2010 'TNotifyEvent' と 'procedure, untyped pointer or untyped parameter' には互換性がありません
から、この引数は、イベントじゃないと駄目なんでしょう。
>Fon(Sender: TObject ; i: Integer);
が間違い?
>が間違い?
ような気がしますが,コードがないので何とも...
皆さんのアドバイスありがとうございます.
質問の趣旨は下記とタブってしまいました.すいません.
https://www.petitmonte.com/bbs/answers?question_id=5200
申し訳ありませんが,一旦「解決」としておきます.
ツイート | ![]() |