Читать «Учебник по Delphi 4.0» онлайн - страница 24

Unknown

Более полезно значение 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);