Учебник по Delphi 4


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;


Содержание раздела