Тривиальный пример ниже - это конденсация проблемы, с которой я пытался разрешить конфликт, когда у меня был элемент перечисленного типа с тем же именем, что и член VCL.
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.
- Первое присваивание не выполняется, потому что компилятор считает, что
alNone
- это тот, который я объявил, а не элементTAlign
, определенный вControls.pas
. - Второе неудачно, потому что для
TForm
для этого имени требуетсяControls
.
Я понимаю, что есть способы обойти это (переименование элемента alNone
является самым простым), но мне любопытно, есть ли способ присвоить ссылку на свойство в другом блоке, где имя элемента конфликтует с идентификатор в текущей области.