![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запомнить параметры формы [D7, WinXP]
Woolen © (2005-10-05 12:23:00)Скидываю в реестр параметры формы. По 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), что окно максимизируется, а не просто передвигается пользователем? А может быть есть совсем иные способы решения?
Woolen (2005-10-05 14:37:00) [1]2 clickmaker
Огромное спасибо, все работает
Woolen (2005-10-05 14:18:00) [2]извиняюсь, resto red
clickmaker (2005-10-05 14:12:00) [3]GetWindowPlacement() поможет?
Woolen (2005-10-05 14:09:00) [4]
> Писать в реестр подобную ерунду просто бред. А если у пользователя
> нет такого права, то что будет? Состояние формы записывается
> обычно
> в файл с помощью, например, класса TFileStream
Нет права на запись в реестр вообще? В любое место? Хотя и не представляю ситуации, когда юзеру запрещено писать в HKEY_CURRENT_USER, допускаю, что такое возможно. Можно переделать. Но к решению проблем это отношения, к сожалению, не имеет.
> обрабатывай событие формы OnClose, в обработчике записывай
> в реестр позицию/размеры/состояние формы
Спасибо, но проблема немного сложнее. Сделать легко, но в этом случае сохранится ширина формы и ее положение в развернутом сотсоянии.
Допустим, у юзера окно 100х100, в позиции 50,50. Он разворачивает его, закрывает. Далее он запускает приложение (оно откроется в полный экран), нажимает "Свернуть в окно" (Restore) и получает не 100х100 и 50,50 как было, а, допустим, 1152х864 и координаты, допустим, 0,0. Хотя там немного другие числа получатся, но, я, думаю, ситуацию, понятно обрисовал. Проблема состоит в том, как сделать, чтобы оно сохранило не только полноэкранное состояние, но и состояние resored. Может быть есть еще какие-то варианты?
Ботвин Дмитрий (2005-10-05 13:15:00) [5]Писать в реестр подобную ерунду просто бред. А если у пользователя нет такого права, то что будет? Состояние формы записывается обычно
в файл с помощью, например, класса TFileStream
Digitman (2005-10-05 12:45:00) [6]дурней не придумать - всякий раз при любых "телодвижениях" юзера, гоняющего мышь туда-сюда, лезть в реестр и записывать его "телодвижения".
тебе нужно восстановить окно создаваемой тобой формы в том состоянии, в котором оно было при предыдущем закрытии ?
обрабатывай событие формы OnClose, в обработчике записывай в реестр позицию/размеры/состояние формы
при конструировании формы считывай эти параметры из реестра и назначай их соотв. св-вам формы