我手头有一本书,讲function时一笔带过。
我做了个function,如下:
function play(const url:string):boolean;
begin
  text1.text:='string';  //error
  result:=true; 
end;请问为什么显示text1没有声明呢。谁给我讲解一下function的用法,给100百分了。谢谢。

解决方案 »

  1.   

    function TForm1.play(const url:string):boolean;//将它定义为类的函数
    begin
      text1.text:='string';  //error
      result:=true; 
    end;由于你在外面,不能引用类的成员,比如form中的text1控件,而需要将他写成类的成员函数,或者用
    class function
      

  2.   

    function play(const url:string):boolean;
    函数声明在form类里面蹴可以了,改正后
    function TForm1.play(const url:string):boolean;//将它定义为类的函数
      

  3.   

    function play(const url:string):boolean;
    begin
      Form1.text1.text:='string';  //play不是在你的窗体类内定义的,所以不能默认,要写上form1的名
      result:=true; 
    end;
      

  4.   

    试了:function TForm1.play(const url:string):boolean;//将它定义为类的函数  
    begin
      text1.text:='string';   //error
      result:=true; 
    end;//error:play  Undeclared identifier:'play'
      

  5.   

    你的text1是哪里冒出来的??
    如果把function play写form中,play调用form 的text1没问题,
    如果text1是全局变量的话,没问题!
      

  6.   

    在实现时少了类名
    在前面还是定义
    function play(const url:string):boolean
      

  7.   

    全部代码,应该明白了!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        text1: TEdit;
        function  play( url:string):boolean;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    play('ssss');
    end;
    function TForm1.play( url:string):boolean;
    begin
      text1.text:=url;
      result:=true;
    end;
    end.
      

  8.   

    函数声明与过程声明相似。不同的是,函数声明需要指定返回类型和返回值。函数声明具有如下形式function functionName(parameterList): returnType; directives;localDeclarations;begin  statementsend;这里的functionName是任意有效的标识符,返回类型returnType是任何类型,语句statements是函数被调用时用于执行的语句序列,参数列表(parameterList)、指示字directives和局部声明localDeclarations是可选的。·有关参数列表parameterList的更多信息,见参数。·有关指示字directives的更多信息,见调用约定,向前声明和接口声明,外部声明,重载过程和函数,以及编写动态可加载库。如果包括多于一个指示字,则要用分号隔开。·有关局部声明(声明局部的标识符)的更多信息,见局部声明。函数的语句块由适用于过程的相同规则管理。在语句块中,可以使用在函数局部声明localDeclarations部分中声明的变量和其他标识符,可以使用参数列表中的参数名,可以使用任何作用域覆盖函数声明的标识符。此外,函数名自身表现为保存函数返回值的特殊变量,与预定义变量Result相同。例如,function WF: Integer;begin  WF := 17;end;上面定义了一个叫做WF的常量函数,该函数不接受任何参数并且总是返回整数值17。上面的声明等价于function WF: Integer;begin  Result := 17;end;下面是一个更复杂的函数声明:function Max(A: array of Real; N: Integer): Real;var  X: Real;  I: Integer;begin  X := A[0];  for I := 1 to N - 1 do    if X < A[I] then X := A[I];  Max := X;end;在语句块中,可以多次对Result或函数名赋值,只要所赋的值与声明的返回类型匹配。函数的执行终止时,不管是哪一种,最后赋给Result或函数名的值成为函数的返回值。例如,function Power(X: Real; Y: Integer): Real;var  I: Integer;begin  Result := 1.0;  I := Y;  while I > 0 do  begin    if Odd(I) then Result := Result * X;    I := I div 2;    X := Sqr(X);  end;end;Result和函数名总是代表相同的值。因此function MyFunction: Integer;begin  MyFunction := 5;  Result := Result * 2;  MyFunction := Result + 1;end;该函数返回值11。然而,用函数名不是完全可以改变Result。当函数名出现在赋值语句的左边时,编译器认为它作为返回值被使用(此时和Result一样);当函数名出现在语句块的其他任何位置时,编译器将其作为对函数自身的递归调用。另一方面,Result可以作为变量用于运算、类型转换、集合构造器、索引、对其他例程的调用。扩展语法编译指示({$X+})有效时,Result在所有函数中都隐含声明。不要试图对其再声明。如果执行终止时未曾向Result或函数名赋值,那么函数的返回值是未定义的。
      

  9.   

    建议你找本书看看,这是最基础的东东.
    function  play( url:string):boolean; //声明function TForm1.play( url:string):boolean;//实现
    begin
      text1.text:=url;
      result:=true;
    end;
      

  10.   

    要在前面也定义上这个函数,注意定义时去掉TForm1;