Delphi can’t get text from TEdit

delphifunction

I've encountered a problem while writing code in Delphi.
Namely I can't get acces to Components, even though they're declared and I used them in code above ( previously in procedures, now I am trying to use them in functions – maybe this is the reason, I don't know, I am not good at Delphi ).
I made a few screens to make it look clearer.
Take a look.

http://imageshack.us/photo/my-images/90/weirddelphi1.png/

http://imageshack.us/photo/my-images/837/weirddelphi2.png/

http://imageshack.us/photo/my-images/135/weirddelphi3.png/">

As you can see on the first screen I'm getting compiler error. It says that the component doesn't exist, but on the third screen you can see that this component exists. On the second screen I can even use this component ( Code Completion can be invoked successfully, but if I try to invoke it in secondFunction's scope I get error like this :
"Unable to invoke Code Completion due to errors in source code " – but what the hell is the error?! ). If I comment these two lines, which refer to Edit7 and Edit8, I can run the program without problems. I really can't figure out what is wrong, if any of you could give me some advice, it would be greatly appreciated. I didn't wanted to post whole code here, because it would take about 300 lines, however if u need to know something else to sort this out then ask I will tell you..

I don't have enough reputation points to post more than 2 hyperlinks so you have to do "copy & paste " with the last one 😀

Best Solution

The problem is that Edit7 is a part of the TForm1 class. Edit7 is not accessible by name outside of TForm1. So either you can use the global Form1 variable, and do

function secondFunction(x: extended): extended;
var
  paramA, paramB: extended;
begin
  paramA := StrToFloat(Form1.Edit7.Text);
  paramB := StrToFloat(Form1.Edit8.Text);

  Result := paramA + paramB * sin(x);
end;

or you can make the secondFunction part of the TForm1 class:

function TForm1.secondFunction(x: extended): extended;
var
  paramA, paramB: extended;
begin
  paramA := StrToFloat(Edit7.Text);
  paramB := StrToFloat(Edit8.Text);

  Result := paramA + paramB * sin(x);
end;

But then you need to declare secondFunction in the declaration of the TForm1 class, like

TForm1 = class(TForm)
private
  { Private declarations }
public
  { Public declarations }
  function secondFunction(x: extended): extended;
end;

in the beginning of the unit.

Related Question