Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];
ВнизЗапомнить параметры формы Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c