TFormPlacement

Модераторы: alexs, Модераторы

TFormPlacement

Сообщение kit » 01.10.2016 09:24:57

Почему я не могу найти компонент TFormPlacement на палитре компонентов?
kit
новенький
 
Сообщения: 89
Зарегистрирован: 29.09.2016 09:39:07

Re: TFormPlacement

Сообщение alexs » 01.10.2016 11:10:27

Потому что код TFormPlacement теперь часть самого LCL и теперь не нужен
Посмотри на TIniPropStorage TXmlPropStorage и из RXFPC - TRxIniPropStorage
А у формы есть свойство - TForm.SessionProperties
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3448
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TFormPlacement

Сообщение kit » 03.10.2016 18:01:38

Задал в SessionProperties: Left, Top, Height, Width і WindowState. На форму перетянуд TRxIniPropStorage.
Если зкриваю Maximized-форму то теряются координати Normalized i при следующем отритии форма остается на весь екран.
kit
новенький
 
Сообщения: 89
Зарегистрирован: 29.09.2016 09:39:07

Re: TFormPlacement

Сообщение alexs » 03.10.2016 21:08:13

Я думаю - это проблема LCL. На самом деле она не имеет отношения к PropStorage.
И, кстати, сохранение размеров форм - может вызвать одну проблему. Сам столкнулся
Пользователи минимизируют формы и закрывают её. После повторного открытия - форма не видна.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3448
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TFormPlacement

Сообщение kit » 04.10.2016 09:45:03

И что делать? Написать свою процедуру сохранения/востановления форми?
kit
новенький
 
Сообщения: 89
Зарегистрирован: 29.09.2016 09:39:07

Re: TFormPlacement

Сообщение Лекс Айрин » 04.10.2016 10:27:35

kit, как минимум, предусмотреть разворачивание окна в процедуре выхода из программы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3554
Зарегистрирован: 19.02.2013 16:54:51

Re: TFormPlacement

Сообщение alexs » 04.10.2016 12:40:22

kit писал(а):И что делать? Написать свою процедуру сохранения/востановления форми?

На мой взгляд - надо сначала определиться - максимизированная форма - это что?
- Это особое состояние формы? В этом случае свойства Left, Top, Width, Height не должны меняться. Они будут отображать старые значения (до максимизации). Сохраняться будет правильно, но для других случаев будут проблемы.
- Это просто форма размером во весь экран? В этом случае свойства Left, Top, Width, Height будут максимальными. И сейчас так оно и есть. Для этого случая надо каким то образом отлавливать событие максимизации формы и хранить размеры до максимизации. Соответственно сохранять их.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3448
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TFormPlacement

Сообщение sts » 04.10.2016 16:21:47

мда, FormPlacement не просто так был придуман, простой PropStorage его не заменит.
там логика была сохранение состояния в зависимости от разрешения экрана, спецлогика обработки WindowState
в общем ктото явно сглупил удалив его.

Добавлено спустя 3 минуты 45 секунд:
ну или не перенеся полноценно функционал

Добавлено спустя 2 минуты 18 секунд:
да и для совместимости оставить и пробрасывать настройки в SessionProperties
sts
постоялец
 
Сообщения: 218
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: TFormPlacement

Сообщение alexs » 04.10.2016 19:22:51

Если кто захочет реализовать его - я только за. Но мне он просто не нужен был. Поэтому я на него даже смотрел, когда тянул исходники из дельфинячего Rx.
Мне в первую очередь был необходим RxDBGrid. И я его продолжаю понемного пилить.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3448
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TFormPlacement

Сообщение kit » 05.10.2016 08:30:27

Если кто-то сделает то я буду тестировать
kit
новенький
 
Сообщения: 89
Зарегистрирован: 29.09.2016 09:39:07

Re: TFormPlacement

Сообщение kit » 06.10.2016 08:47:23

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
kit
новенький
 
Сообщения: 89
Зарегистрирован: 29.09.2016 09:39:07


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru