[DUG]Scope
Phil Middlemiss
phil at tumonz.co.nz
Fri Feb 10 10:12:55 NZDT 2006
tbdata is a field of TForm1 so the code that uses it must have an
instance of TForm1 to access tbdata.
So the code that uses it needs to have:
FormInstance.tbData.First;
while not FormInstance.tbData.eof do
etc.
John Bird wrote:
> This is my understanding of accessing variables and procedures and functions
> in other units and forms:
>
> Functions and Procedures I found summarised nicely in a post:
>
> "From: James Getz <supporti... at borland.com>
> Subject: Re: Calling a procedure in another form
>
> The answer to your question depends on where you declare the function.
> If the function is declared as part of the form object, then you would use
> form.function (it is a method of the form class at that point) to access
> it. If it's a freestanding function (not part of a class) then you would
> access it as unit.function."
>
> I have also found that if the other unit is in the uses clause, then a
> freestanding function or procedure does not even need the unit name - the
> compiler and linker can find it using the uses clause. This is how I use a
> unit full of library procedures and functions, with just the procedure or
> function name. Delphi also does this all the time, for example to find
> FieldbyName is defined in Delphi 2006 hovering over this statement reveals
> the tip "Declared in DB.TDataSet", and when using FieldbyName no unit prefix
> is required.
>
> Variables - if declared in the interface section of say unit1, and unit2
> has a "uses unit1" statement then unit2 can see these global variables in
> unit1.
>
> QUESTION:
>
> Now - I have moved some code from one unit to another and it won't compile
>
> Unit1 declares in the interface section
>
> type
> TForm1 = class(TForm)
> tbData: TClientDataSet;
> DataSource1: TDataSource;
> DBGrid1: TDBGrid;
>
>
> Unit2 declares
>
> implementation
>
> {$R *.dfm}
> uses Unit1,Unit3...etc;
>
>
> But statements in unit2 such as
>
> tbData.First;
> while not tbData.eof do
> begin
> setfont('arial',8);
> printtab(tbData.fieldbyname('Field1').asString);
> printtab(tbData.fieldbyname('Field2').asString);
> printtab(tbData.fieldbyname('Field3').asString);
>
>
> Are all giving errors about tbdata saying undeclared identifier and won't
> compile. I am thinking Unit2 should be able to see tbData in Unit1.
> (I am trying to put some Rave Report code into a separate general printing
> routine so I can re-use it).
>
> John
>
>
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: phil.vcf
Type: text/x-vcard
Size: 250 bytes
Desc: not available
Url : http://ns3.123.co.nz/pipermail/delphi/attachments/20060210/78731c83/phil.vcf
More information about the Delphi
mailing list