Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Сворачивание окна в Delphi
Посл.ответ Сообщение

Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 июля 2007 21:40
· Личное сообщение · #1

Возможно-ли ПОЛНОСТЬЮ запретить сворачивание формы в Win2k/Xp и т.д., вот пробовал код:

procedure TForm1.WMShowWindow(var Msg: TWMShowWindow);
begin
if not Msg.Show then
Msg.Result := 0
else
inherited;
end;

но при "свернуть все окна" (win+D) - всё равно сворачивается =(
Во думаю, прикрутить таймер и это отслеживать, но как-то эт некрасиво ;), Может у кого есть идеи??

ЗЫ
Во ищё, может кто знает, как запретить Alt+Tab в NT-системах, или как это обойти ;), чтоб моя форма постоянно была StayOnTop...




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 июля 2007 21:43
· Личное сообщение · #2

1) перекрывай Application.OnMinimize
2) ищи инфу по SetWindowPos

-----
invoke OpenFire




Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 июля 2007 21:52 · Поправил: alexey_k
· Личное сообщение · #3

Ice-T пишет:
перекрывай Application.OnMinimize


посиб, реализовал так (+таймер, но зато работает :s3...

Ice-T пишет:
2) ищи инфу по SetWindowPos

эт ты насчёт Alt+Tab?




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 июля 2007 22:03
· Личное сообщение · #4

alexey_k пишет:
+таймер

не понял, зачем тебе таймер?

alexey_k пишет:
эт ты насчёт Alt+Tab?

да. посмотри, что делает эта функа.
если во время вызывать например вот так: SetWindowPos(Application.Handle,HWND_TOPMOST,Left,Top,Width,Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE)
то твое окно всегда будет OnTop.

-----
invoke OpenFire




Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 июля 2007 22:14
· Личное сообщение · #5

Ice-T пишет:
не понял, зачем тебе таймер


ну сначала сделал так:

procedure TForm1.Restore(Sender: TObject);
begin
Application.Restore;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.OnMinimize := Restore;
end;

НО!
При Win+D прога разворачивается НЕ всегда , я так и не понял почему???
может - ось виновата - хз...

поэтому и использовал таймер для проверки свёрнутости...

ЗЫ
вот интересно, а можно-ли ЗАПРЕТИТЬ сворачивание формы вообще?




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 июля 2007 22:28
· Личное сообщение · #6

alexey_k перехватываешь сообщение WMWINDOWPOSCHANGING вот так:

procedure WMWINDOWPOSCHANGING
(var Msg: TWMWINDOWPOSCHANGING);
message WM_WINDOWPOSCHANGING;


обработчик такой:

SetWindowPos(Application.Handle,HWND_TOPMOST,Left,Top,Width,Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Application.Restore;


это решает обе твои проблемы

-----
invoke OpenFire




Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 июля 2007 22:31
· Личное сообщение · #7

Ice-T пишет:
если во время вызывать например вот так: SetWindowPos(Application.Handle,HWND_TOPMOST,Left,Top,Width,Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE)
то твое окно всегда будет OnTop.


решил вот как:

procedure TForm1.Restore(Sender: TObject);
begin
Application.Restore;
SetWindowPos(Application.Handle, HWND_TOPMOST, Left,Top,Width,Height,
SWP_NOMOVE or SWP_NOSIZE)
end;
procedure TForm1.Create(Sender: TObject);
begin
Application.OnMinimize := Restore;
Application.OnDeactivate := Restore;
end;

Ice-T спасибо за советы

Собственно вопрос закрыт.




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 июля 2007 22:37
· Личное сообщение · #8

alexey_k можно и так, но смотри пост выше, это "правильнее".

-----
invoke OpenFire



 eXeL@B —› Программирование —› Сворачивание окна в Delphi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати