FindComponent在程序中不起作用

时间:2013-08-10 11:26:03

标签: delphi lazarus

我正在开发一个程序来计算不同TStringGrid中某些数据的平均值,我想要使用一个程序。它被称为calcola

procedure calcola(numero:ShortInt; StringGrid:TStringGrid; pbarprog:ShortInt);
var i,j,cont,num:shortint;
    avg,temp,numfl:double;
    a:string;
    Edit1:TEdit;
begin
if StringGrid.Colcount>1 then

 //other code

       avg:=temp/cont;
       TLabel(FindComponent('Label'+IntToStr(num))).Caption:=FloatToStrF(avg, ffGeneral, 1, 1);
       Edit1.Text:=FloatToStr(StrToFloat(TLabel(FindComponent('Label'+IntToStr(num))).Caption)*10);
       TProgressBar(FindComponent('ProgressBar'+IntToStr(i+pbarprog))).Position:=StrToInt(Edit1.Text);

       //other code

     end;
   end;
end; 

在这个程序中,Lazarus告诉我“ Identifier not found FindComponent ”。然后我在procedure TForm1.Button1Click(Sender: TObject);中剪切/粘贴相同的代码,我没有错误。

我需要在FindComponent()内使用calcola,我该怎么做?

1 个答案:

答案 0 :(得分:6)

  
    

然后我在程序TForm1.Button1Click(Sender:TObject)中剪切/粘贴相同的代码;我没有错。

  

编译器在进行更改时停止抱怨的原因是当calcola被声明为TForm1的方法时,编译器可以通过向后搜索TForm1的声明方法和对象的公共方法来解析标识符FindComponent从(TForm ... TObject)下降,直到找到一个用该名称声明的。 FindComponent在TComponent中声明。

编译器抱怨你的原始版本的原因是calcola在程序的全局范围内被声明(我假设)作为一个独立的例程,对于那些,编译器只搜索先前声明的独立过程/函数,不是被宣称为对象方法的那些。

如果由于某种原因你的calcola程序绝对必须是一个独立的程序,那么最好的办法是调整它的参数,这样你就可以将TForm1的特定实例作为参数传递给它,就像你有StringGrid。