Delphi 5. Учебник



         

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;




Содержание  Назад  Вперед