Это (я думаю), потому что вы воссоздаете форму каждый раз, когда ее отображаете.То есть вы делаете
with TForm2.Create(nil) do
try
ShowModal;
finally
Free;
end;
Поскольку вы создаете новый экземпляр класса TForm2
каждый раз, когда вы его показываете, и уничтожаете его, когда форма закрыта, позиция меняется;действительно, новый объект TForm2
не может запомнить положение любого предыдущего объекта TForm2
.Это два разных объекта (да, один и тот же класс, но это не имеет значения)!
Самое простое решение - добавить TForm2
в список «автоматического создания форм» в параметрах проекта.Он существует по умолчанию, но если вы создаете его вручную (как я думаю, и как в приведенном выше фрагменте кода), вы должны были удалить его из списка форм, которые создаются автоматически ...
Снимок экрана IDE http://privat.rejbrand.se/autocreateform.png
Затем убедитесь, что Unit1
использует Unit2
, так что вы можете получить доступ к глобальной переменной Form2
в Unit2
из Form1
, которая находится в Unit1
,Во время редактирования Unit1
нажмите Alt + F11, чтобы сделать это.
Затем вы можете просто показать Form2
, выполнив
Form2.ShowModal;
При первом показе он будет уважать егоPosition
и расположите его над формой владельца.Но затем он запомнит свою позицию, поэтому во второй раз, когда вы отобразите его, он будет именно там, где он был закрыт в первый раз.