Delphi выдает синтаксические ошибки: . ожидается, но ; найдена ошибка

Я играю в Delphi XE6 и добавляю эту процедуру на кнопку:

procedure TTabbedForm.btnLoadingClick(Sender: TObject);
var
  dlg: Unit2;

begin

  dlg := Form2.Create(nil);
  Form2.ShowModal();

end;

Delphi выдает следующую ошибку при компиляции:

[DCC Error] TabbedTemplate.pas(53): E2029 '.' expected but ';' found
[DCC Error] TabbedTemplate.pas(55): E2029 ';' expected but 'BEGIN' found
[DCC Fatal Error] Speelpleintjes.dpr(7): F2063 Could not compile used unit 'TabbedTemplate.pas'

Строка 53: dlg: Unit2;

Честно говоря, я очень озадачен, синтаксис кажется правильным, процедура автоматически генерируется на вкладке событий.

Какие-либо предложения?


person Michel Bijlsma    schedule 24.08.2014    source источник
comment
Юнит2 это класс или юнит? Form2 это класс или объект? Кажется, что в этих нескольких строках кода много путаницы. Если dlg является объектом класса Form2, то, возможно, вы захотите использовать dlg.ShowModal()... не Form2.ShowModal().   -  person Frazz    schedule 25.08.2014
comment
Вы должны поработать над некоторыми базовыми учебниками ... этот фрагмент исходного кода вообще неверен (кроме автоматически сгенерированных частей)   -  person Sir Rufo    schedule 25.08.2014
comment
Я удалил все и снова добавил форму с нормальными именами. Теперь ошибка исчезла, но у меня есть некоторые другие проблемы. Спасибо за помощь, мне нужно еще немного RTFM, я думаю;) @SirRufo Это было скопировано из вики-элемента embarcadero, но я думаю, что пропустил несколько шагов. .   -  person Michel Bijlsma    schedule 25.08.2014


Ответы (1)


Если Unit2 является другим юнитом в вашем проекте (судя по названию, скорее всего так оно и есть), его нельзя использовать как тип напрямую. Единицы только декларируют вещи. Вот почему компилятор ожидает ., так как вы можете префикс идентификатора с именем модуля, чтобы направить на объявление в этом конкретном модуле.

Чтобы исправить это, напишите dlg: TForm2;

Также обычной практикой является вызов конструкторов из объявления класса, а не из переменной, поэтому измените его на:

dlg := TForm2.Create(nil);

Или используйте переменную Form2, которая обычно уже содержит экземпляр TForm2. По умолчанию дополнительные формы, добавляемые в проект Delphi, создаются скрытыми, готовыми к Show или ShowModal.

person Stijn Sanders    schedule 25.08.2014