PSTN.DLL - Сохранение размеров, положение и состояние заданого окна в реестре.
Содержание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