title: Delphi - How do you resolve a conflict when a unit name is the same as a property name?
body: <p>The trivial example below is a condensation of a problem I had trying to resolve a conflict where I had an enumerated type member with the same name as a VCL member.</p>
  
  <pre><code>unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs;
  
  type
    TForm1 = class(TForm)
      procedure FormCreate(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.dfm}
  
  type
      TSomeType = (
        alNone,
        alSome,
        alMany) ;
  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  Self.Align := alNone ;                    // 1.  type mismatch
  Self.Align := Controls.alNone ;           // 2.  "Controls" is also a property of TForm
  end ;
  
  end.
  </code></pre>
  
  <ul>
  <li>The first assignment fails because the compiler thinks <code>alNone</code> is the one I declared and not the <code>TAlign</code> member defined in <code>Controls.pas</code>.</li>
  <li>The second one fails because it took <code>Controls</code> to mean the <code>TForm</code> property of that name.  </li>
  </ul>
  
  <p>I realise there are ways around this (renaming the <code>alNone</code> member being the simplest), but I'm curious as to whether there is a way of qualifying a reference to a property in another unit where the <em>unit name</em> conflicts with an identifier in the current scope. </p>