Страница 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