Position
Position — это свойство перечислимого типа, определяющее размещение формы при запуске приложения.
Значение по умолчанию (poDesigned) заставляет форму выводиться в месте, определенном при разработке приложения. Положение и размер формы при этом берутся из свойств Left, Top, Height и Width. Поскольку вы не можете знать заранее, в какой системе будет запущено ваше приложение, может оказаться, что на мониторе с низким разрешением при использовании этого значения свойства будет видна только часть формы.
Более полезно значение poScreenCenter, использующее заданные вами при создании приложения значения Width и Height, но оно так изменяет Left и Тор, что форма выводится в центре экрана.
Если вы установите Position равным poDefault, Windows автоматически установит размеры и положение формы, но вы при этом лишитесь возможности контролировать ее размеры. Можете создать форму размером 200х200, которая будет выведена как 640х480. Из-за этого, в частности, не допускается применение данного значения для MDI-форм.
Значение poDefaultPosOnly более полезно, так как оно автоматически определяет расположение формы, но не ее размеры (а потому рекомендуется для MDI-форм, в которых требуются определенные размеры дочерних форм).
Последнее значение свойства (poDefaultSizeOnly) автоматически определяет размер, но не расположение формы. Это значение может использоваться там, где важно положение формы на экране, а не ее размер.
Хотя свойство Position позволяет определить, каким образом будет выводиться форма, профессионально сделанные приложения сами запоминают свое расположение на экране и при следующем запуске выводятся в той же позиции и с тем же размером. Это осуществимо, например, благодаря записи положения окна в Registry или в INI-файле, в том же каталоге, где находится приложение. Обычно сохранение позиции и размеров экрана выполняется в самый последний момент — при уничтожении формы.
procedure TForml.FormDestroy(Sender: TObject);
var
sAppPath: String;
iniSettings: TINIFile;
begin
{Получить путь к ЕХЕ-файлу приложения.}
sAppPath:= ExtractFilePath(Application.EXEName);
{Создаем объект TINIFile.}
iniSettings:= TINIFile.Create(sAppPath + 'SETTINGS.INI');
try
{Записываем свойства в INI-файл.}
iniSettings.Writelnteger(Name,'Left',Left);
iniSettings.Writelnteger(Name,'Top',Top);
iniSettings.Writelnteger(Name,'Width',Width);
iniSettings.Writelnteger(Name,'Height',Height);
finally
iniSettings.Free;
end;
end;
Совет: Для компиляции примера не забудьте включить в раздел uses модуль INIFiles.
После выполнения кода ваш INI-файл будет содержать нечто вроде
[Form1]
Left=108
Тор=174
Width=540
Height=165
Заметьте, что для строки раздела используется свойство Name вашей формы.
Восстановить положение формы на экране немного сложнее (главным образом из-за того, что следует отработать ситуацию, когда INI-файла нет).
procedure TFormI.Create(Sender: TObject);
const
CNOTFOUND = -1;
var
sAppPath: String;
iniSettings: TINIFile;
liValue: Longint;
begin
{Получаем путь к ЕХЕ-файлу приложения.}
sAppPath:= ExtractFilePath(Application.ExeName);
{Создаем объект TINIFile.}
iniSettings:= TINIFile.Create(sAppPath + 'SETTINGS.INI');
try
{ Пытаемся считать значение Left.}
liValue:= iniSettings.Readlnteger(Name,'Left',cNOTFOUND);
{Проверяем, считано ли значение.}
if liValue = cNOTFOUND then
begin
{Свойства в INI-файле не найдены — центруем форму.}
Left:= (Screen.Width - Width) div 2;
Top:= (Screen.Height - Height) div 2;
end
else
begin
{Считываем значения из INI-файла.}
Left:= iniSettings.Readlnteger(Name,'Left',Left);
Top:= iniSettings.Readlnteger(Name,'Top',Top);
Height:= iniSettings.Readlnteger(Name,'Height',Height);
Width:= iniSettings.Readlnteger(Name,'Width'.Width);
end;
finally
iniSettings.Free;
end:
end;