Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Блокировать сворачивание окна


antonn ©   (2006-03-01 09:28:00) 

как можно предотвратить сворачивание окна от ярлыка "Рабочий стол"? (Свернуть все окна, тип файла Windows Explorer Command, по-умолчанию находится на панели быстрого запуска)
окно без рамки(бордюра), хотя в общем то без разницы. Не сворачиваются только "on-top" окна, а мне нужно "несвернуть" обычное.
делал так (грубо, наверное, но ничего умнее не придумал...):

procedure TForm1.WndProc (var message: TMessage);
begin
 case message.Msg of
  WM_SHOWWINDOW: begin
   case message.WParam of
     0: exit;
   end;
  end;
 end;
  inherited;
end;


против Win+M помогает, а от той бадяги из первой строки - нет :(
может я не то сообщение перехватываю?
и вообще, такое чувство, что это окна не сворачиваются, а становятся visible:=false;


antonn   (2006-03-06 12:02:00) [1]


> IsWindow

:)))
прошу прощения за неснятый ручник:)


begin...end   (2006-03-06 09:38:00) [2]

> как узнать, существует ли форма с определенным хендлом?

IsWindow


antonn   (2006-03-06 09:32:00) [3]

т.е. как узнать, существует ли форма с определенным хендлом?


antonn   (2006-03-06 09:17:00) [4]

а при падении explorer'а окна уничтожаются, или живы еще? т.е. их хендлы меняются, как до них добраться можно? утечка получается, как из можно сделать free?


GrayFace   (2006-03-04 15:15:00) [5]

Вот:
var w:hwnd;
  w:=FindWindow('Progman','Program Manager');
  if w=0 then exit;
  windows.SetParent(Handle, w);


> Игорь Шевченко ©   (01.03.06 19:26) [11]
> Есть же операция, обратная "показать рабочий стол".
>
> Вкратце, при этой операции окно рабочего стола помещается
> поверх всех в системе, никаких сворачиваний не происходит.

Нет. На моем старом компьютере хорошо видно, что сворачивание окон происходит.


NightLord   (2006-03-03 15:56:00) [6]


> [14] GrayFace ©   (03.03.06 10:54)

А каким образом? меня эт вопрос тоже интересует.


GrayFace   (2006-03-03 10:54:00) [7]

А если поместить окно на десктоп? Т.е. внутрь окна "Progam Maneger".


Игорь Шевченко   (2006-03-01 19:39:00) [8]

antonn ©   (01.03.06 19:32) [12]

А ты проконсультируйся с авторами программ, перечисленных в [10] - вдруг скажут.


antonn   (2006-03-01 19:32:00) [9]

Игорь Шевченко ©   (01.03.06 19:26) [11]
Есть же операция, обратная "показать рабочий стол".

жаль, что юзеры не все об этом знают...


> Вкратце, при этой операции окно рабочего стола
> помещается поверх всех в системе, никаких сворачиваний
> не происходит.

ну да, это я понял уже. Но перемещения то есть (доходят WM_WINDOWPOSCHANGING и WM_WINDOWPOSCHANGED), можно ли выставить окно перед окном desttop'а? по аналогии с hwndInsertAfter, только не после, а перед. Стиль "onTop" применять нельзя, отсюда и проблема.


Игорь Шевченко   (2006-03-01 19:26:00) [10]

Есть же операция, обратная "показать рабочий стол".

Вкратце, при этой операции окно рабочего стола помещается поверх всех в системе, никаких сворачиваний не происходит.


antonn   (2006-03-01 19:20:00) [11]

Crash Coredump ©   (01.03.06 19:11) [9]
Программа, нарушающая привычное поведение интерфейса, заслуживает только одно почетное место - в корзине.

а я еще раз спрошу - вы имеете представление о той программе, о ее интерфейсе? Уже сделана тьма тьмущая всяких часов/окон статуса/заметок и подобного софта, где окошко размером 200*50 пикселей должно постоянно находиться минимум на рабочем столе. И ничего, пользователи пользуют подобный софт, и не ворчат на "непривычное поведение интерфейса", томому как для подобного софта - несворачиваемось при "Свернуть все окна" как раз и является привычным и удобным. мне нужно такой функционал прикрутить к этой программе: http://deskclock.narod.ru/DS_main.htm(не сочтите за рекламу)


Crash Coredump   (2006-03-01 19:11:00) [12]

antonn ©   (01.03.06 18:53) [8]

Не надо желать странного, лучше заняться полезной функциональностью. Программа, нарушающая привычное поведение интерфейса, заслуживает только одно почетное место - в корзине.


antonn   (2006-03-01 18:53:00) [13]

Crash Coredump ©   (01.03.06 18:39) [7]
все с вами ясно...


Crash Coredump   (2006-03-01 18:39:00) [14]

antonn ©   (01.03.06 13:05) [2]


> я так понимаю, Вы имеете представление о той программе,
> в которой мне нужна подобная функциональность?


Даже не собираюсь иметь. Такой программе место в корзине.


antonn   (2006-03-01 16:19:00) [15]

мда, без примера совсем не понятно... :(
не понятно, где ее вызывать.
да и использовал так:
EndDeferWindowPos(DeferWindowPos(0,handle,
        HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE));

не понять, правильно или нет...

ЗЫ пытался на application.HookMainWindow прицепиться, тоже никак...


umbra   (2006-03-01 15:06:00) [16]

да, как оказалось, в принципе это возможно. Посмотрите в СДК информацию о функциях BeginDeferWindowPos, DeferWindowPos, EndDeferWindowPos


antonn   (2006-03-01 14:52:00) [17]

umbra ©   (01.03.06 13:21) [3]
konfabulator (программка, реализующая виджеты) как то может...


umbra   (2006-03-01 13:21:00) [18]


> и вообще, такое чувство, что это окна не сворачиваются,
> а становятся visible:=false;

у них меняется z-ордер. Похоже, для всех окон по очереди вызывается функция SetWindwPosи, значит, сделать ничего нельзя


antonn   (2006-03-01 13:05:00) [19]

Crash Coredump ©   (01.03.06 12:42) [1]
Зачем насиловать пользователя ?

я так понимаю, Вы имеете представление о той программе, в которой мне нужна подобная функциональность? или это "служебная фраза" во славу "правильного построения интерфейса"?


Crash Coredump   (2006-03-01 12:42:00) [20]


> как можно предотвратить сворачивание окна от ярлыка "Рабочий
> стол"?


Зачем насиловать пользователя ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо