Показать полную графическую версию : Delphi
Типа как dropbasket в Net Vampire или Flash Get. Чтобы никогда не сворачивалось. Какие есть варианты?
vasketsov
05-04-2004, 21:25
Что-то примерно такое
hMenu := GetSystemMenu(hWindow, FALSE);
DeleteMenu(hMenu, MF_BYCOMMAND, SC_MINIMIZE);
hWindow сначала надо взять из Form-ы, потом из Application (чтоб не сворачивался из панели задач). Если не достаточно - будем дальше думать.
vasketsov у меня BorderStyle:=bsNone поэтому убирать ту кнопочку нет смысла (ее и так нет:)), надо бы сделать так чтобы приложение не было видно на панели задач (пробовал ShowWindow(Application.Handle, sw_Hide), не помогает), и чтобы его нельзя было свернуть даже командой "свернуть все окна".
hasherfrog
06-04-2004, 09:40
Скрыть кнопку с таскбара - этого в сети полно, например:
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;
А вот воспрепятствовать хайд-олл, ИМХО, не выйдет вообще. (Поправьте, если я ошибаюсь)
hasherfrog спасибо, код работает :up:.
А вот воспрепятствовать хайд-олл, ИМХО, не выйдет вообще. (Поправьте, если я ошибаюсь)
Да нет, можно это (Net Vampire например), но как??? Если изменением св-в окна этого не сделать, то может хук поставить на системное сообщение "свернуть все окна" что ли, если такое возможно?
vasketsov
06-04-2004, 20:14
Kuper
Попробуй придушить сообщение WM_SYSCOMMAND с кодом SC_MINIMIZE
:( помогает лишь при нажатии на кнопочку свернуть в заголовке окна
Как-то просто должно делаться, я уверен, но вот как?
vasketsov
08-04-2004, 19:33
Kuper
А как не помогает?
Как сворачиваешь?
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
Kuper
Все гениальное просто :)
Вот только все же мне не совсем понятно кое-что. Получается, что нажатие на Hide-all просто вызывает рассылку SC_MINIMIZE всем окнам. Кто их игнорирует, не сворачивается. Но как тогда работают программы по обработке всяких там Антибосс-кеев и т.д. (а их полным-полно в сети). Например (первое попавшееся)
http://www.pssoftlab.com/onlinehelp/configadditional.phtml
обещает ни много, ни мало, а
Now you can minimize any application to a system tray.
vasketsov
09-04-2004, 23:59
hasherfrog
нажатие на Hide-all просто вызывает рассылку SC_MINIMIZE
Нет. Для коректной работы Application Bar (панель приложений) там рассылается мессага ДО и мессага ПОСЛЕ этого. Вот ее тебе и надо отлавливать. На www.msdn.com про это есть в разделе APP BAR MESSAGES, точнее сказать не могу.
hasherfrog
10-04-2004, 11:50
vasketsov
:) На самом деле решение нужно не мне, а Kuper. Я лишь подкидываю бестолковые идеи, которые, увы, не могу проверить сам: у меня сейчас нет MsVS дома.
Вот еще одна бредовая идея: я проверил действие "свернуть все" на WinAmp'е. Очень интересно - когда от находится в режиме StayOnTop, то не сворачивается. Теперь мне интересено, не может ли этот флаг влиять на дефолтную реакцию окна на сворачивание? Или это винАмп просто "знает методы на костю сапрыкина"?
Прошу прощения за долгое молчание, дешевые свичи говорят сами за себя.
Итак, народ, все очень просто:
SetWindowPos(Application.Handle, HWND_TOPMOST, left, top, width, height, SWP_HIDEWINDOW);
Именно с такими параметрами, получаем несворачиваемое окно, располагающееся поверх всех.
Но мне надо этот эффект в немного извращенном варианте, т.е. чтобы окно было не поверх всех окон, а наоборот снизу.
Меня уже глючит, теперь не могу перехватить сообщение при сворачивании окна из таскбара. Help me!
Блин тут удалили дублирующую тему, но вопрос остался. Обратиться больше некуда. Жду помощи )
Эх поднимаем старые темы :)
Не могу въехать почему не работает???? Не выскакивает мессага!!!
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;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.