Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
4-1128591108
Symbol
2005-10-06 13:31
2005.12.11
Ввод со звуковой карты


2-1132825558
thvfrjd
2005-11-24 12:45
2005.12.11
Excel


2-1132944808
Бандерас
2005-11-25 21:53
2005.12.11
Обычная задачка


2-1133110516
Neosted
2005-11-27 19:55
2005.12.11
Память компьютера


1-1131808969
Gennadiy
2005-11-12 18:22
2005.12.11
Проблема печати картинки на принтере!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский