Главная страница
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.028 c
2-1132960367
Dos
2005-11-26 02:12
2005.12.11
Из dbf в mdb


14-1132162975
Knight
2005-11-16 20:42
2005.12.11
Вопрос к владельцам Nokia 6100... у кого есть прошивка?


2-1132992714
Piero
2005-11-26 11:11
2005.12.11
Убрать фокус


4-1129093499
SANEK_10289
2005-10-12 09:04
2005.12.11
Где в реестре взять имя пользователя?


2-1132735366
yrbanchik
2005-11-23 11:42
2005.12.11
светомузыка