Страница 1 из 1
TFormPlacement
Добавлено:
01.10.2016 09:24:57
kit
Почему я не могу найти компонент TFormPlacement на палитре компонентов?
Re: TFormPlacement
Добавлено:
01.10.2016 11:10:27
alexs
Потому что код TFormPlacement теперь часть самого LCL и теперь не нужен
Посмотри на TIniPropStorage TXmlPropStorage и из RXFPC - TRxIniPropStorage
А у формы есть свойство - TForm.SessionProperties
Re: TFormPlacement
Добавлено:
03.10.2016 18:01:38
kit
Задал в SessionProperties: Left, Top, Height, Width і WindowState. На форму перетянуд TRxIniPropStorage.
Если зкриваю Maximized-форму то теряются координати Normalized i при следующем отритии форма остается на весь екран.
Re: TFormPlacement
Добавлено:
03.10.2016 21:08:13
alexs
Я думаю - это проблема LCL. На самом деле она не имеет отношения к PropStorage.
И, кстати, сохранение размеров форм - может вызвать одну проблему. Сам столкнулся
Пользователи минимизируют формы и закрывают её. После повторного открытия - форма не видна.
Re: TFormPlacement
Добавлено:
04.10.2016 09:45:03
kit
И что делать? Написать свою процедуру сохранения/востановления форми?
Re: TFormPlacement
Добавлено:
04.10.2016 10:27:35
Лекс Айрин
kit, как минимум, предусмотреть разворачивание окна в процедуре выхода из программы.
Re: TFormPlacement
Добавлено:
04.10.2016 12:40:22
alexs
kit писал(а):И что делать? Написать свою процедуру сохранения/востановления форми?
На мой взгляд - надо сначала определиться - максимизированная форма - это что?
- Это особое состояние формы? В этом случае свойства Left, Top, Width, Height не должны меняться. Они будут отображать старые значения (до максимизации). Сохраняться будет правильно, но для других случаев будут проблемы.
- Это просто форма размером во весь экран? В этом случае свойства Left, Top, Width, Height будут максимальными. И сейчас так оно и есть. Для этого случая надо каким то образом отлавливать событие максимизации формы и хранить размеры до максимизации. Соответственно сохранять их.
Re: TFormPlacement
Добавлено:
04.10.2016 16:21:47
sts
мда, FormPlacement не просто так был придуман, простой PropStorage его не заменит.
там логика была сохранение состояния в зависимости от разрешения экрана, спецлогика обработки WindowState
в общем ктото явно сглупил удалив его.
Добавлено спустя 3 минуты 45 секунд:
ну или не перенеся полноценно функционал
Добавлено спустя 2 минуты 18 секунд:
да и для совместимости оставить и пробрасывать настройки в SessionProperties
Re: TFormPlacement
Добавлено:
04.10.2016 19:22:51
alexs
Если кто захочет реализовать его - я только за. Но мне он просто не нужен был. Поэтому я на него даже смотрел, когда тянул исходники из дельфинячего Rx.
Мне в первую очередь был необходим RxDBGrid. И я его продолжаю понемного пилить.
Re: TFormPlacement
Добавлено:
05.10.2016 08:30:27
kit
Если кто-то сделает то я буду тестировать
Re: TFormPlacement
Добавлено:
06.10.2016 08:47:23
kit
unit AppUtils;
procedure WriteFormPlacement(Form: TForm; IniFile: TCustomInifile; const Section: string);
begin
with Form do begin
IniFile.WriteInteger(Section, siFlags, Ord(WindowState));
IniFile.WriteInteger(Section, siPixels, Screen.PixelsPerInch);
// if not(WindowState = wsNormal) then
// WritePosStr(IniFile, Section, siNormPos, Format('%d,%d,%d,%d',[Left, Top, Width, Height]))
// else
WritePosStr(IniFile, Section, siNormPos, Format('%d,%d,%d,%d',[RestoredLeft, RestoredTop, RestoredWidth, RestoredHeight]));
end;
end;
WriteFormPlacement нужно вешать на TForm.OnShow