Скрыть окно из таскбара. Как?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение SovNarKom » 21.03.2006 00:37:19

Доброго всем времени суток,
В связи с тем, что начиная с ревизии от

2005-03-26 11:24 micha r7029

  /trunk/lcl/:
    forms.pp
    include/: application.inc

  remove TApplication.Handle (not cross-platform)


Стало невозможно скрыть окно из таскбара, при помощи ShowWindow(Application.Handle, SW_HIDE);

Мне известно, что можно осуществить это, если указать в качестве предка, невидимое окно... но мне этод метод кажется кривоватым.

Существующее у формы свойство ShowInTaskBar - вообще для win32 не реализован похоже.

Пока роюсь в англоязычных форумах, но безуспешно...
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение IUnknown » 21.03.2006 11:52:32

В любом случае Handle это как я понимаю тоже что HWND. Тогда можно поступить так

Код: Выделить всё
hwnd : =FindWindow(nil,'MyWindowName');
if hwnd <> 0 then
ShowWindow(hwnd, SW_HIDE);
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение Гость_SovNarKom » 21.03.2006 12:07:44

IUnknown
Это аналог Visible у TForm, этот код скроет именно окно, но из таскбара его не уберёт, а мне нужно наоборот
Гость_SovNarKom
 

Сообщение IUnknown » 21.03.2006 12:18:05

Тогда стоит копать в направлении стиля окна. Окошко на таскбаре не будет видно если у него установлен расширенный стиль WS_EX_TOOLWINDOW.
Примерно что-то такое

Код: Выделить всё
SetWindowLong( Handle, GetWindowLong (Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW)
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение SovNarKom » 21.03.2006 12:32:45

IUnknown
Не, я вчера уже пробовал... прокатывает, если более одного окна и все надо скрыть(но одна кнопа всё равно остаётся).

Промежуточное решение такое(найдено методом сканирования окон в процессе):
Код: Выделить всё
showwindow(findwindow('window',<'projectname'>), sw_hide);

Но мне оно не очень нравится... надо просто найти, где создаётся окно с классом 'window' и именем программы.


Во!
Код: Выделить всё
win32object.inc
...
procedure TWin32WidgetSet.AppInit(var ScreenInfo: TScreenInfo);
...
// Create parent of all windows, `button on taskbar'
 FAppHandle := CreateWindow(@ClsName, PCha...
...


Теперь нужно только докопаться до FAppHandle
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение IUnknown » 21.03.2006 13:07:40

Можно еще попробовать Shell_NotifyIcon, с первым параметром NIM_DELETE
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение SovNarKom » 21.03.2006 13:15:03

Вот, нашол наконец-то.
Код: Выделить всё
uses
Win32Int, InterfaceBase;

ShowWindow(TWin32WidgetSet(WidgetSet).AppHandle, SW_HIDE);


Shell_NotifyIcon не пробовал, но где-то плохое о нём читал...
да и что ему передавать?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение IUnknown » 21.03.2006 13:19:25

Да вот для альтернативы пример из МСДН

Код: Выделить всё
BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID)
{
   BOOL res;
   NOTIFYICONDATA tnid;

   tnid.cbSize = sizeof(NOTIFYICONDATA);
   tnid.hWnd = hwnd;
   tnid.uID = uID;
       
   res = Shell_NotifyIcon(NIM_DELETE, &tnid);
   return res;
}
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение Иван Шихалев » 22.03.2006 14:39:13

Да вот для альтернативы пример из МСДН

Это для удаления иконки "у часиков".
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение IUnknown » 22.03.2006 17:50:46

Это для удаления иконки "у часиков".


Ага, но все равно вся эта область есть Taskbar. На WinApi нету "красивого" способа убрать оттуда кнопку. Так что если в Лазаре уже реализована такая возможность - это безусловно зачет :)
IUnknown
новенький
 
Сообщения: 73
Зарегистрирован: 10.03.2006 14:25:02
Откуда: Донецк

Сообщение SovNarKom » 26.04.2006 17:57:44

Частично пофиксено кажется.

<a href='http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&t=2194' target='_blank'>http://www.lazarus.freepascal.org/index.ph...iewtopic&t=2194</a>
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

Рейтинг@Mail.ru