TFormPlacement
Модераторы: alexs, Модераторы
TFormPlacement
Почему я не могу найти компонент TFormPlacement на палитре компонентов?
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Потому что код TFormPlacement теперь часть самого LCL и теперь не нужен
Посмотри на TIniPropStorage TXmlPropStorage и из RXFPC - TRxIniPropStorage
А у формы есть свойство - TForm.SessionProperties
Посмотри на TIniPropStorage TXmlPropStorage и из RXFPC - TRxIniPropStorage
А у формы есть свойство - TForm.SessionProperties
Задал в SessionProperties: Left, Top, Height, Width і WindowState. На форму перетянуд TRxIniPropStorage.
Если зкриваю Maximized-форму то теряются координати Normalized i при следующем отритии форма остается на весь екран.
Если зкриваю Maximized-форму то теряются координати Normalized i при следующем отритии форма остается на весь екран.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Я думаю - это проблема LCL. На самом деле она не имеет отношения к PropStorage.
И, кстати, сохранение размеров форм - может вызвать одну проблему. Сам столкнулся
Пользователи минимизируют формы и закрывают её. После повторного открытия - форма не видна.
И, кстати, сохранение размеров форм - может вызвать одну проблему. Сам столкнулся
Пользователи минимизируют формы и закрывают её. После повторного открытия - форма не видна.
И что делать? Написать свою процедуру сохранения/востановления форми?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
kit, как минимум, предусмотреть разворачивание окна в процедуре выхода из программы.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
kit писал(а):И что делать? Написать свою процедуру сохранения/востановления форми?
На мой взгляд - надо сначала определиться - максимизированная форма - это что?
- Это особое состояние формы? В этом случае свойства Left, Top, Width, Height не должны меняться. Они будут отображать старые значения (до максимизации). Сохраняться будет правильно, но для других случаев будут проблемы.
- Это просто форма размером во весь экран? В этом случае свойства Left, Top, Width, Height будут максимальными. И сейчас так оно и есть. Для этого случая надо каким то образом отлавливать событие максимизации формы и хранить размеры до максимизации. Соответственно сохранять их.
мда, FormPlacement не просто так был придуман, простой PropStorage его не заменит.
там логика была сохранение состояния в зависимости от разрешения экрана, спецлогика обработки WindowState
в общем ктото явно сглупил удалив его.
Добавлено спустя 3 минуты 45 секунд:
ну или не перенеся полноценно функционал
Добавлено спустя 2 минуты 18 секунд:
да и для совместимости оставить и пробрасывать настройки в SessionProperties
там логика была сохранение состояния в зависимости от разрешения экрана, спецлогика обработки WindowState
в общем ктото явно сглупил удалив его.
Добавлено спустя 3 минуты 45 секунд:
ну или не перенеся полноценно функционал
Добавлено спустя 2 минуты 18 секунд:
да и для совместимости оставить и пробрасывать настройки в SessionProperties
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Если кто захочет реализовать его - я только за. Но мне он просто не нужен был. Поэтому я на него даже смотрел, когда тянул исходники из дельфинячего Rx.
Мне в первую очередь был необходим RxDBGrid. И я его продолжаю понемного пилить.
Мне в первую очередь был необходим RxDBGrid. И я его продолжаю понемного пилить.
Если кто-то сделает то я буду тестировать
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
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
