Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Запомнить параметры формы   Найти похожие ветки 

 
Woolen ©   (2005-10-05 12:23) [0]

Скидываю в реестр параметры формы. По WM_MOVE скидываю Top и Left. На WM_SIZE скидываю размеры и WindowState вот так:
if Visible then
 begin
 Reg := GetReadyToWriteWndParam;
   case Msg.SizeType of
   SIZE_RESTORED: begin
                  WriteWndParmToReg(Reg,wwpWidth);
                  WriteWndParmToReg(Reg,wwpHeight);
                  WriteWndParmToReg(Reg,wwpWindowState,Cardinal(wsNormal));
                  end;
   SIZE_MAXIMIZED: WriteWndParmToReg(Reg,wwpWindowState,Cardinal(wsMaximized));
   end;
 CloseAfterWriteWndParam(Reg);
 end;

WriteWndParmToReg пишет заданный параметр. Например, при wwpWidth пишет ширину. Проблема в том, что при развертывании формы на весь экран сначала приходит WM_MOVE (программа записывает координаты окна, как будто оно в левом верхнем углу), а потом WM_SIZE (только теперь программа узнает, что окно было максимизировано и их писать не следовало). Следовательно при загрузке приложения если оно было максимизировано, если я нажимаю "Свернуть в окно", то окно оказывается не там, где было, а в левом верхнем углу. Как узнать до WM_SIZE (во время WM_MOVE), что окно максимизируется, а не просто передвигается пользователем? А может быть есть совсем иные способы решения?


 
Digitman ©   (2005-10-05 12:45) [1]

дурней не придумать - всякий раз при любых "телодвижениях" юзера, гоняющего мышь туда-сюда, лезть в реестр и записывать его "телодвижения".

тебе нужно восстановить окно создаваемой тобой формы в том состоянии, в котором оно было при предыдущем закрытии ?

обрабатывай событие формы OnClose, в обработчике записывай в реестр позицию/размеры/состояние формы

при конструировании формы считывай эти параметры из реестра и назначай их соотв. св-вам формы


 
Ботвин Дмитрий   (2005-10-05 13:15) [2]

Писать в реестр подобную ерунду просто бред. А если у пользователя нет такого права, то что будет? Состояние формы записывается обычно
в файл с помощью, например, класса TFileStream


 
Woolen ©   (2005-10-05 14:09) [3]


> Писать в реестр подобную ерунду просто бред. А если у пользователя
> нет такого права, то что будет? Состояние формы записывается
> обычно
> в файл с помощью, например, класса TFileStream

Нет права на запись в реестр вообще? В любое место? Хотя и не представляю ситуации, когда юзеру запрещено писать в HKEY_CURRENT_USER, допускаю, что такое возможно. Можно переделать. Но к решению проблем это отношения, к сожалению, не имеет.

> обрабатывай событие формы OnClose, в обработчике записывай
> в реестр позицию/размеры/состояние формы

Спасибо, но проблема немного сложнее. Сделать легко, но в этом случае сохранится ширина формы и ее положение в развернутом сотсоянии.
Допустим, у юзера окно 100х100, в позиции 50,50. Он разворачивает его, закрывает. Далее он запускает приложение (оно откроется в полный экран), нажимает "Свернуть в окно" (Restore) и получает не 100х100 и 50,50 как было, а, допустим, 1152х864 и координаты, допустим, 0,0. Хотя там немного другие числа получатся, но, я, думаю, ситуацию, понятно обрисовал. Проблема состоит в том, как сделать, чтобы оно сохранило не только полноэкранное состояние, но и состояние resored. Может быть есть еще какие-то варианты?


 
clickmaker ©   (2005-10-05 14:12) [4]

GetWindowPlacement() поможет?


 
Woolen ©   (2005-10-05 14:18) [5]

извиняюсь, restored


 
Woolen ©   (2005-10-05 14:37) [6]

2 clickmaker
Огромное спасибо, все работает



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
2-1132778916
vasek
2005-11-23 23:48
2005.12.11
не работает динамически созданный обработчик


14-1132683240
QuasiLamo
2005-11-22 21:14
2005.12.11
delphimaster.ru + IRC


2-1133182730
IAMDANIL
2005-11-28 15:58
2005.12.11
Кто писал проверялку для прог?


4-1128570737
Angel[Saint]
2005-10-06 07:52
2005.12.11
Сервис и RegisterHotKey


14-1132214056
Карелин Артем
2005-11-17 10:54
2005.12.11
Определение пола автоматом.