我声明的过程,想要用到窗体里的控件,还想要有若干输入的参数和返回的参数,怎么声明呢
如果按下面,则在过程里用不起窗体里的控件
procedure searchrule(参数);
  var user_str:string;
  begin
  //
  //
  end;如果按下面,怎么才能返回值和输入其他值呢
procedure searchrule(Sender: TObject);
  var user_str:string;
  begin
  //
  //
  end;

解决方案 »

  1.   

    简单的例子
    procedure searchrule(edt1: TEdit; cb: TComboBox; s: string);
      var user_str:string;
      begin
        edt1.Text := cb.Items.Strings[cb.Items.ItemIndex];
        //
         其他
        //
        s:= edt1.Text;
      end;
      

  2.   

    把控件对象当参数传入过程或者函数.如果想返回,则使用函数,或者使用var关键字.
      

  3.   

    上楼的改进
    type
     myreturn=record
     a:string;
     b:integer;
     end ;
    用procedure 是没有返回值的,要用到function
    function searchrule(edt1: TEdit; cb: TComboBox; s: string):myreturn;
      var user_str:string;
      begin
        edt1.Text := cb.Items.Strings[cb.Items.ItemIndex];
        //
         其他
        //
        s:= edt1.Text;
        result.a:=s;
        result.b:=2;
      end;
    这样就可以了,
      

  4.   

    procedure searchrule(参数);
    改成
    function TForm1.searchrule(传入参数):传出参数
      

  5.   

    procedure searchrule(Sender: TObject;参数或变参);
    这样不就ok了!
      

  6.   

    用Var關鍵字比較好點,如下
    function myfun(var intA,intB:integer):boolean;
    begin
      intA:=intA+10;
      intb:=intB+20;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      ia,ib:integer;
    begin
      ia:=0;
      ib:=0;
      myfun(ia,ib);
      ShowMessage(Format('%d  %d',[ia,ib]));//返回10,20
    end;
      

  7.   

    如果结果很有规律的话可以用function返回一个数组类型的数据
    如果没有规律,可以定义一个结构体来接受当然还可以用procedure ,接受结果的变量当成参数写进去,var关键字来表示是址传递。