Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2011, 17:36   #1
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию запрет сворачивания окна

не знаю где лучше создать тему тут или в winapi
Как сделать что бы окно не сворачивалась (учитывая win+D)
в процессе думанья набрел на 2 варианта
используя TApplicationEvents
Код:
procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
begin
Application.Restore;
end;
и обработка сообщений windows
Код:
procedure TForm1.WndProc(var Msg: TMessage);
begin
  inherited;
if msg.Msg =WM_SYSCOMMAND then
  if msg.WParam=SC_MINIMIZE then begin
   Application.Restore;
  end;
end;
но эти способы не как не риагируют на win+D
и если сворачивать как обычно оно сначало свернется а потом развернется, что не есть гуд.
не понятно почему так происходит используя второй пример, ведь сообщение WM_SYSCOMMAND окну посылается до того как оно свернется
кстати так тоже не работает
Цитата:
if msg.Msg =WM_SYSCOMMAND then
if msg.WParam=SC_MINIMIZE then begin
msg.Msg:=0;
end;
fate вне форума Ответить с цитированием
Старый 21.03.2011, 17:56   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Может хук на win+D? Типа вот этого:
http://forum.vingrad.ru/faq/topic-41584.html
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 21.03.2011, 18:05   #3
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

неужели нет способа без хука?
во вложение пример реализации того что я хочу, на писаный на basic
без всяких dll и работает же, не поверю что бы на basic это можно было сделать а на delphi нет
Вложения
Тип файла: rar Win.rar (8.4 Кб, 41 просмотров)
fate вне форума Ответить с цитированием
Старый 22.03.2011, 09:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я может и пальцем в небо но попробуй через RegisterHotKey переопределить обработку Win+D
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.03.2011, 22:11   #5
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

не помогает
fate вне форума Ответить с цитированием
Старый 23.03.2011, 04:18   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

win+D ничего не сворачивает и не минимизирует, вобще-то. Оно просто рисует десктоп поверх всех окон.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.03.2011, 05:28   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

вот, ето событие происходит при сворачивании таким способом,
но что вписать, что б воспрепятствовать не придумал
Код:
  private
    procedure WMShowWindow(var Message: TWMShowWindow); message WM_SHOWWINDOW;
...
procedure TForm1.WMShowWindow(var Message: TWMShowWindow);
begin
  ShowMessage('Svernylos');
  inherited;
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 23.03.2011, 10:10   #8
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

veniside
ну как быть-то, примере что я прикрепил (экзешник) нажимаешь win+D и окно некуда не пропадает. К тому же в моих примерах по отловки сообщений если кликнуть правой мышкой на панели задач по программе и выбрать свернуть оно свернется.

ArtGrek
спасибо за совет, сделал так
Код:
procedure TForm1.WndProc(var Msg: TMessage);
begin
if msg.Msg =WM_SHOWWINDOW then
  if msg.WParam=0 then begin
    msg.WParam:=1;
  end;
  inherited;
end;
все работает если попытаться свернуть оно как бы сворачивается, но все равно остается висеть и даже если кликнуть мышкой по проге на панели задач. НО от win+D ее это не спасает, все изчезает
fate вне форума Ответить с цитированием
Старый 23.03.2011, 11:59   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> нажимаешь win+D и окно некуда не пропадает

и очень плохо, что не пропадает.

Вы скажите, чего хотите добиться? Чтобы ваша прога маячила перед глазами у юзера и ее никак нельзя было ни прибить ни свернуть? Ну проверяйте по таймеру, что окно висит поверх других постоянно. Только рано или поздно всесокрушающее ядро налетит на несокрушимый столб, и начнётся нечто страшное.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.03.2011, 12:07   #10
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

veniside да конкретно не чего, просто хочу понять как это сделать.
Если бы не было реально работающего примера я б быть может смерился, типа не предусмотренно это виндой, но тут же есть пример, значит можно сделать
fate вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет закрытия окна coNsept Общие вопросы C/C++ 5 21.08.2010 16:56
Запрет разтягивание окна KoBRaAndrey Общие вопросы Delphi 5 01.10.2009 22:27
Запрет закрытия чужого окна DV-Karpov Общие вопросы Delphi 2 20.09.2009 10:26
Запрет изменения размера окна? unicode Общие вопросы Delphi 3 23.04.2009 14:12
Запрет на закрытие окна Bayazet Общие вопросы Delphi 4 25.12.2008 11:29