Главная страница
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.197 c
2-1132780091
Pasha L
2005-11-24 00:08
2005.12.11
сдвинуть колонку


1-1131652868
Layner
2005-11-10 23:01
2005.12.11
Узнать название родителя у родителя виз. комп.


1-1131740019
redlord
2005-11-11 23:13
2005.12.11
как узнать на сколько прога грузит проц ?


2-1132499036
Express
2005-11-20 18:03
2005.12.11
TRichEdit


3-1130306511
Кешаня
2005-10-26 10:01
2005.12.11
Освобождение таблицы