Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Delphi (http://forum.oszone.net/showthread.php?t=29517)

JCooper 05-04-2004 18:55 204338

Типа как dropbasket в Net Vampire или Flash Get. Чтобы никогда не сворачивалось. Какие есть варианты?

vasketsov 05-04-2004 21:25 204339

Что-то примерно такое
hMenu := GetSystemMenu(hWindow, FALSE);
DeleteMenu(hMenu, MF_BYCOMMAND, SC_MINIMIZE);

hWindow сначала надо взять из Form-ы, потом из Application (чтоб не сворачивался из панели задач). Если не достаточно - будем дальше думать.

JCooper 05-04-2004 22:30 204340

vasketsov у меня BorderStyle:=bsNone поэтому убирать ту кнопочку нет смысла (ее и так нет:)), надо бы сделать так чтобы приложение не было видно на панели задач (пробовал ShowWindow(Application.Handle, sw_Hide), не помогает), и чтобы его нельзя было свернуть даже командой "свернуть все окна".

hasherfrog 06-04-2004 09:40 204341

Скрыть кнопку с таскбара - этого в сети полно, например:
Код:


procedure TForm1.FormCreate(Sender: TObject) ;
begin
   ShowWindow(Application.Handle, SW_HIDE) ;
   SetWindowLong(Application.Handle, GWL_EXSTYLE,
     getWindowLong(Application.Handle, GWL_EXSTYLE) or
     WS_EX_TOOLWINDOW) ;
   ShowWindow(Application.Handle, SW_SHOW) ;
end;

А вот воспрепятствовать хайд-олл, ИМХО, не выйдет вообще. (Поправьте, если я ошибаюсь)

JCooper 06-04-2004 17:02 204342

hasherfrog спасибо, код работает :up:.

Цитата:

А вот воспрепятствовать хайд-олл, ИМХО, не выйдет вообще. (Поправьте, если я ошибаюсь)
Да нет, можно это (Net Vampire например), но как??? Если изменением св-в окна этого не сделать, то может хук поставить на системное сообщение "свернуть все окна" что ли, если такое возможно?

vasketsov 06-04-2004 20:14 204343

Kuper
Попробуй придушить сообщение WM_SYSCOMMAND с кодом SC_MINIMIZE

JCooper 06-04-2004 21:10 204344

:(  помогает лишь при нажатии на кнопочку свернуть в заголовке окна

JCooper 07-04-2004 19:38 204345

Как-то просто должно делаться, я уверен, но вот как?

vasketsov 08-04-2004 19:33 204346

Kuper
А как не помогает?
Как сворачиваешь?

JCooper 08-04-2004 22:29 204347

vasketsov
Код:

procedure Min(var Msg: TMessage); message WM_SYSCOMMAND;
....................

procedure TForm1.Min(var Msg: TMessage);
begin
   if Msg.WParam = SC_MINIMIZE then
   else inherited;
end;

Сворачивается лишь при минимизаии окна через системное меню, ежели через меню панели задач или по команде свернуть все окна то нифига.

Рыл в инете и надыбал исходник проги на с++, там это самое несворачиваемое окошко является диалоговым в режиме Modal (главное окно там ваще невидимое). Но я еще не совсем разобрался как ето реализовано.

hasherfrog 09-04-2004 10:16 204348

Kuper
Все гениальное просто :)
Вот только все же мне не совсем понятно кое-что. Получается, что нажатие на Hide-all просто вызывает рассылку SC_MINIMIZE всем окнам. Кто их игнорирует, не сворачивается. Но как тогда работают программы по обработке всяких там Антибосс-кеев и т.д. (а их полным-полно в сети). Например (первое попавшееся)
http://www.pssoftlab.com/onlinehelp/...ditional.phtml
обещает ни много, ни мало, а
Цитата:

Now you can minimize any application to a system tray.

vasketsov 09-04-2004 23:59 204349

hasherfrog
Цитата:

нажатие на Hide-all просто вызывает рассылку SC_MINIMIZE
Нет. Для коректной работы Application Bar (панель приложений) там рассылается мессага ДО и мессага ПОСЛЕ этого. Вот ее тебе и надо отлавливать. На www.msdn.com про это есть в разделе APP BAR MESSAGES, точнее сказать не могу.

hasherfrog 10-04-2004 11:50 204350

vasketsov
:) На самом деле решение нужно не мне, а Kuper. Я лишь подкидываю бестолковые идеи, которые, увы, не могу проверить сам: у меня сейчас нет MsVS дома.
Вот еще одна бредовая идея: я проверил действие "свернуть все" на WinAmp'е. Очень интересно - когда от находится в режиме StayOnTop, то не сворачивается. Теперь мне интересено, не может ли этот флаг влиять на дефолтную реакцию окна на сворачивание? Или это винАмп просто "знает методы на костю сапрыкина"?

JCooper 12-04-2004 22:31 204351

Прошу прощения за долгое молчание, дешевые свичи говорят сами за себя.
Итак, народ, все очень просто:
Код:

SetWindowPos(Application.Handle, HWND_TOPMOST, left, top, width, height, SWP_HIDEWINDOW);
Именно с такими параметрами, получаем несворачиваемое окно, располагающееся поверх всех.
Но мне надо этот эффект в немного извращенном варианте, т.е. чтобы окно было не поверх всех окон, а наоборот снизу.

JCooper 26-04-2004 20:16 204352

Меня уже глючит, теперь не могу перехватить сообщение при сворачивании окна из таскбара. Help me!

JCooper 05-05-2004 23:17 204353


Блин тут удалили дублирующую тему, но вопрос остался. Обратиться больше некуда. Жду помощи )

JCooper 17-08-2004 23:47 204354

Эх поднимаем старые темы :)
Не могу въехать почему не работает???? Не выскакивает мессага!!!
Код:

 private
     { Private declarations }
     procedure WMSize( Var msg: TWMSize ); Message WM_SIZE;
   end;

 var
   Form1: TForm1;

 implementation

 {$R *.dfm}

 procedure TForm1.WMSize(var msg: TWMSize);
 begin
   If msg.Sizetype = SIZE_MINIMIZED then
     ShowMessage('Window MINIMIZED');
   inherited;
 end;



Время: 02:11.

Время: 02:11.
© OSzone.net 2001-