Войти

Показать полную графическую версию : Delphi


JCooper
05-04-2004, 18:55
Типа как dropbasket в Net Vampire или Flash Get. Чтобы никогда не сворачивалось. Какие есть варианты?

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

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

JCooper
05-04-2004, 22:30
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;

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

JCooper
06-04-2004, 17:02
hasherfrog спасибо, код работает :up:.

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

Да нет, можно это (Net Vampire например), но как??? Если изменением св-в окна этого не сделать, то может хук поставить на системное сообщение "свернуть все окна" что ли, если такое возможно?

vasketsov
06-04-2004, 20:14
Kuper
Попробуй придушить сообщение WM_SYSCOMMAND с кодом SC_MINIMIZE

JCooper
06-04-2004, 21:10
:(  помогает лишь при нажатии на кнопочку свернуть в заголовке окна

JCooper
07-04-2004, 19:38
Как-то просто должно делаться, я уверен, но вот как?

vasketsov
08-04-2004, 19:33
Kuper
А как не помогает?
Как сворачиваешь?

JCooper
08-04-2004, 22:29
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, то не сворачивается. Теперь мне интересено, не может ли этот флаг влиять на дефолтную реакцию окна на сворачивание? Или это винАмп просто "знает методы на костю сапрыкина"?

JCooper
12-04-2004, 22:31
Прошу прощения за долгое молчание, дешевые свичи говорят сами за себя.
Итак, народ, все очень просто:

SetWindowPos(Application.Handle, HWND_TOPMOST, left, top, width, height, SWP_HIDEWINDOW);

Именно с такими параметрами, получаем несворачиваемое окно, располагающееся поверх всех.
Но мне надо этот эффект в немного извращенном варианте, т.е. чтобы окно было не поверх всех окон, а наоборот снизу.

JCooper
26-04-2004, 20:16
Меня уже глючит, теперь не могу перехватить сообщение при сворачивании окна из таскбара. Help me!

JCooper
05-05-2004, 23:17
Блин тут удалили дублирующую тему, но вопрос остался. Обратиться больше некуда. Жду помощи )

JCooper
17-08-2004, 23:47
Эх поднимаем старые темы :)
Не могу въехать почему не работает???? Не выскакивает мессага!!!

 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