Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отслеживание изменения положения формы

12K
07 сентября 2006 года
Шмель
20 / / 20.04.2006
Здравствуйте.
Описане задачи. Необходимо после закрытия приложения запоминать координаты основной формы и восстанавливать при запуске приложения. Можно запомнить координаты при событии OnDestroy, но есть маленькая деталь - а если мы закрывались в режиме "На весь экран"? Откуда вытянуть координаты окна, которые дожны быть использованы при попытке восстановить размер/положение окна из полноэкранного режима? Хочется, чтобы даже если мы выходили из приложения в полноэкранном режиме, а потом при запуске восстанавливали его, то чтобы была возможность восстановить и не полноэкранный режим?
PS: Событие OnResize похоже не подходит - оно происходит раньше, чем изменится состояние WindowsState (wsNormal/wsMaximalize) и мы запоминаем координаты полноэкранного режима. Да и перемещение окна это событие не отслеживает.
PPS: Или где хранятся координаты работающего приложения для восстановления окна из полноэкранного режима?
Спасибо.
725
07 сентября 2006 года
UnErase
190 / / 08.06.2006
Если форма делается во весь экран, перед этим выставляй переменную-флаг и запоминай какие размеры перед этим были последнии, и тогда при запуски формы проверяй, если флаг установлен, тогда вызывай функцию развертывания окна во весь экран.
12K
07 сентября 2006 года
Шмель
20 / / 20.04.2006
Хотел бы согласиться, но прочитайте постскриптум в начальном посте. Вначале я так тоже предполагал.
725
07 сентября 2006 года
UnErase
190 / / 08.06.2006
Тогда сравнивай размеры формы и размеры экрана после изменения размера формы, и если они не совпадают с размерами когда форма в полный экран, тогда запоминай эти размеры, иначе выставляй флаг.

Размеры экрана (Screen->Width, Screen->Height)
725
07 сентября 2006 года
UnErase
190 / / 08.06.2006
Или покапайся в сообщении WM_WINDOWPOSCHANGED (ING)
12K
07 сентября 2006 года
Шмель
20 / / 20.04.2006
Это использование API? Подскажите, пожалуйста, как этим пользоваться, где можно почитать?
1.9K
07 сентября 2006 года
SABROG
242 / / 26.01.2006
Как такой вариант ?

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "IniFiles.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString PP;
AnsiString fconf = "Conf.ini";
TMemIniFile *conf;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
PP = GetCurrentDir() + "\\";
        if (FileExists(PP + fconf)) {
conf = new TMemIniFile(PP + fconf);
TWindowState st = (TWindowState)conf->ReadInteger("Form","WindowState",WindowState);

        if (st == wsMaximized) {
        Top = conf->ReadInteger("Form","Top",Top);
        Left = conf->ReadInteger("Form","Left",Left);
        Width = conf->ReadInteger("Form","Width",Width);
        Height = conf->ReadInteger("Form","Height",Height);
        ShowWindow(Handle,SW_MAXIMIZE);
        }else{
        Top = conf->ReadInteger("Form","Top",Top);
        Left = conf->ReadInteger("Form","Left",Left);
        Width = conf->ReadInteger("Form","Width",Width);
        Height = conf->ReadInteger("Form","Height",Height);
        }
        }
        else{
conf = new TMemIniFile(PP + fconf);
                }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
conf->WriteInteger("Form","WindowState",WindowState);
        if (WindowState == wsMaximized){
        ShowWindow(Handle,SW_SHOWNORMAL);
        }
conf->WriteInteger("Form","Top",Top);
conf->WriteInteger("Form","Left",Left);
conf->WriteInteger("Form","Width",Width);
conf->WriteInteger("Form","Height",Height);
conf->UpdateFile();
delete conf;
}
//---------------------------------------------------------------------------
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог