//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
Отслеживание изменения положения формы
Описане задачи. Необходимо после закрытия приложения запоминать координаты основной формы и восстанавливать при запуске приложения. Можно запомнить координаты при событии OnDestroy, но есть маленькая деталь - а если мы закрывались в режиме "На весь экран"? Откуда вытянуть координаты окна, которые дожны быть использованы при попытке восстановить размер/положение окна из полноэкранного режима? Хочется, чтобы даже если мы выходили из приложения в полноэкранном режиме, а потом при запуске восстанавливали его, то чтобы была возможность восстановить и не полноэкранный режим?
PS: Событие OnResize похоже не подходит - оно происходит раньше, чем изменится состояние WindowsState (wsNormal/wsMaximalize) и мы запоминаем координаты полноэкранного режима. Да и перемещение окна это событие не отслеживает.
PPS: Или где хранятся координаты работающего приложения для восстановления окна из полноэкранного режима?
Спасибо.
Если форма делается во весь экран, перед этим выставляй переменную-флаг и запоминай какие размеры перед этим были последнии, и тогда при запуски формы проверяй, если флаг установлен, тогда вызывай функцию развертывания окна во весь экран.
Хотел бы согласиться, но прочитайте постскриптум в начальном посте. Вначале я так тоже предполагал.
Размеры экрана (Screen->Width, Screen->Height)
Или покапайся в сообщении WM_WINDOWPOSCHANGED (ING)
Это использование API? Подскажите, пожалуйста, как этим пользоваться, где можно почитать?
Как такой вариант ?