Question:
How can I call a function or procedure in another unit,
or retrieve and set the value of a variable in another unit?
Answer:
Anything defined in the interface section of a unit is visible
and callable from another unit that uses that unit. This
includes Types, Constants, Classes, Functions, and Procedures.
You should simply add the unit's name you want to use to the
uses clause of the unit you wish to use it from. Unless
necessary, you should define the uses clause in the
implementation section, to help avoid circular reference
errors. This is where two units depend on each other in their
interface sections.
If you have a function in the current unit that has the same
name as a function in another unit your wish to call, you can
preface the function name with the unit name to fully qualify
it.
The following example demonstrates calling functions and
procedures and accessing variables in another unit:
Example:
{Code for unit2}
unit Unit2;
interface
procedure SomeProcedure(i : integer);
function SomeFunction(i : integer) : integer;
var
SomeInteger : integer;
implementation
procedure SomeProcedure(i : integer);
begin
SomeInteger := i;
end;
function SomeFunction(i : integer) : integer;
begin
Result := SomeInteger;
SomeInteger := i;
end;
end.
{Code for unit1's implementation section:}
implementation
uses
Unit2;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
SomeProcedure(10);
ShowMessage(IntToStr(SomeFunction(12)));
ShowMessage(IntToStr(SomeInteger));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{Lets do the same thing as Button1Click but fully
qualify the names}
Unit2.SomeProcedure(10);
ShowMessage(IntToStr(Unit2.SomeFunction(12)));
ShowMessage(IntToStr(Unit2.SomeInteger));
end;