PSTN.DLL - Сохранение размеров, положение и состояние заданого окна в реестре.

Содержание
  1. Подключение
  2. Использование
  3. Автор

1) Подключение
Скопировать файл "PSTN.DLL" в папку к использующей её программе при динамической использовании, а при статической файлы "pstn.lib" и "position.h". Подробнее ниже или в книгах по программированию.


2) Использование
Библиотека экспорирует несколько функции, но необходимых всего две _LoadPos* - для загрузки старых размеров окна, а для их сохранения - _SavePos*.

Описание функций (у обоих функции параметры одинаковы):
_SavePos(HKEY Root, AnsiString Key, TForm *frm);
_LoadPos(HKEY Root, AnsiString Key, TForm *frm);
где HKEY Root – раздел, AnsiString Key – узел, TForm frm – форма с которой работаем.

При статическом использовании, подключить к проэкту pstn.lib и добавить строку #include "position.h" в файл реализации (*.cpp). Вызов функций библиотеки не отличается от вызова Ваших функций.

А при диномическом необходимо выполнить следующее для сохранения размеров. В заголовочном файле добавить:
typedef bool __declspec (dllimport) SavePosition(HKEY, AnsiString, TForm *);
SavePosition *SavePos;
В нужном месте файла реализации:
AnsiString File = ExtractFilePath(Application->ExeName) + "pstn.dll";
HINSTANCE dll = LoadLibrary(File.c_str());
if (dll)
    {
    SavePos = (SavePosition *)GetProcAddress(dll, "_SavePos");
    if (SavePos)
        {
        SavePos(HKEY_CURRENT_USER, "Software\\_pstn.dll", Form1);
        }
    else
        {
        ShowMessage(SysErrorMessage(GetLastError()));
        }
    FreeLibrary(dll);
    }
else
    {
    ShowMessage(SysErrorMessage(GetLastError()));
    }
А для применения:
typedef bool __declspec (dllimport) LoadPosition(HKEY, AnsiString, TForm *);
LoadPosition *LoadPos;
это добавляем в *.h, а это в *.cpp:
AnsiString File = ExtractFilePath(Application->ExeName) + "pstn.dll";
HINSTANCE dll = LoadLibrary(File.c_str());
if (dll)
    {
    LoadPos = (LoadPosition *)GetProcAddress(dll, "_LoadPos");
    if (LoadPos)
        {
        LoadPos(HKEY_CURRENT_USER, "Software\\_pstn.dll", Form1);
        }
    else
        {
        ShowMessage(SysErrorMessage(GetLastError()));
        }
    FreeLibrary(dll);
    }
else
    {
    ShowMessage(SysErrorMessage(GetLastError()));
    }

Примечание №1. В данном примере библиотека находистся в одной папке с программой.

Примечание №2. При переносе на компьтер где не установлен Borland C++ Builder позботьтесь о том чтоб файлы «rtl60.bpl», «vcl60.bpl», «borlndmm.dll» были скопированы в папку с библотекой или в System32!

* - как избавиться от символа «_» и сохранить работоспособность DLL'ки мне пока не понятно. Если в опциях проекта убрать галочку «Generate underscores» то получается ошибка «[Linker Error] Unresolved external '_ftol' referenced from POSITION.OBJ». Поэтому пока не придумаю как это обойти пусть стоит.


3) Автор
Ильяшенко Геннадий Юрьевич (Evil Smile)
sigismund.freud@gmail.com
www.devil-smile.narod.ru