7
votes

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 :D

1
I give you +5 rep to get you starting. You question is very clear and easy-to-follow. - Andreas Rejbrand
for what it's worth, there's little to be gained and much to be lost by using the 80 bit Extended data type. I'd recommend Double instead. - David Heffernan
In future please could you post the code in the question. Reading it out of screenshots is painful. - David Heffernan
@David: Well, but now we see the red line where the compiler stops, and the compiler's error message. I don't know what browser you use, but I use to drag the (shrunken) image to a new tab, to see it in full size. - Andreas Rejbrand

1 Answers

6
votes

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.