Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What unit scope do I need for this?

I am trying to install a 3rd party package and I get a compile error:

[DCC Error] fiile/line : E2003 Undeclared identifier: 'Windows'

which refers to this line:

wnd := Windows.GetFocus;

It seems fairly obvious that I don't have my Unit Scopes right - but which do I need (and is there a general approach to find which use clause I need)?

I currently have

Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;System;Xml;Data;Datasnap;Web;
Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;Winapi;System.Win

[Update]

interface
uses
SysUtils, winapi.windows, Classes, Controls, ExtCtrls, Graphics, StdCtrls, 
Dialogs, IniFiles, winapi.messages, Forms, Math
{$IFDEF DELPHI6_LVL}
, Variants
{$ENDIF}
;

No uses in the impementation section.

[Upate] I forgot to mention. I failed (in the same way) to install it on one laptop. Then I succeeded on a second. The trouble is that I'd rather have it on my desktop and after a fresh install of XE2 starter I get these problems.

like image 485
Mawg says reinstate Monica Avatar asked Feb 13 '12 05:02

Mawg says reinstate Monica


2 Answers

Assuming that your uses names the Windows unit at all, it would appear to do so by naming the unit as Winapi.Windows. And so your code must also do so and be written as

wnd := Winapi.Windows.GetFocus;

When you use a unit by naming the fully scoped unit name, you must also use the fully scoped name in subsequent code in that unit.

Now, if you want to use the name Windows then you must name the unit as Windows in the uses clause and let the unit alias setting do its job. If you imported the unit by naming it Windows then your original code will work.

To be very clear:

uses
  Winapi.Windows;

is what you have now but you would need:

uses
  Windows;

for your code to compile.

like image 121
David Heffernan Avatar answered Oct 05 '22 08:10

David Heffernan


You unit scope looks fine, so try these two options

declare in your uses section Windows instead of Winapi.Windows

or modify your code like so

wnd :=  Winapi.Windows.GetFocus;
like image 44
RRUZ Avatar answered Oct 05 '22 07:10

RRUZ