Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   CoolTrayIcon (https://forum.antichat.xyz/showthread.php?t=160471)

SultanOFF 01.12.2009 21:10

CoolTrayIcon
 
Здравствуйте. Объясните пожалуйста как работать с данным компонентом. Никак не пойму как сделать чтобы при сворачивании в панели задач вкладка Моего приложения не отображалась...думаю что надо перехватывать сворачивание формы однако надеюсь есть более изящный способ?


ПС: наверно от Моих миллионных запросов гугл вскоре засунет Меня в бан :(

whexp 01.12.2009 21:15

http://expert.delphi.int.ru/question/2419/ Посмотри в коментах.

SultanOFF 01.12.2009 21:27

так ведь там работа с trayicon, а Мне нужно cooltrayicon..либо Я там не нашел :(

ZdezBilYa 01.12.2009 21:36

у компонента есть свойство MinimizeToTray. если True, то сворачивается в трей, если False, то в панель задач

SultanOFF 01.12.2009 21:38

у Меня стоит труе и все равно в панель задач! ПС работаю в делфи 2009

ZdezBilYa 01.12.2009 21:44

тогда не знаю. в 7 и в 2010 работает безотказно

NFM 01.12.2009 21:57

в папке \demos\CoolTrayTest есть пример. посмотри его, и все вопросы сразу отпадут

SultanOFF 01.12.2009 22:12

Я его смотрел, там при нажатии на кнопку исчезает вкладка с панели задач, Я тоже могу вставить кнопку и уже обрабатывая нажатие кнопки делать чтобы вкладка с панели задач исчезла. Но ведь Мне нужно чтобы при сворачивании..получается нужно перехватывать сворачивание и больше никак? :(

POS_troi 01.12.2009 22:34

У формы есть свойство ShowTaskBar в обработчик "Сворачивания" всунь False для этого свойства (Действительно для C++.net VS2008)

P.S. только заметил что делфя, но пусть будет =)

SultanOFF 01.12.2009 22:37

вот этот самый обработчик сворачивания Я никак и не могу найти! Мне нужно чтобы при сворачивании исчезало,однако как обрабатывать нажатие на кнопку сворачивания хз, если только перехватывать но это муторно. Может у Меня компонент глюк, кто скажет откуда скачать cooltrayicon для delphi 2009???

ZdezBilYa 01.12.2009 22:53

Попробуй: CoolTrayIcon
Я ставил CoolTrayIcon_D140.dpk для D2010 (попробуй его или CoolTrayIcon_D120.dpk)

SultanOFF 01.12.2009 23:03

и то и другое попробовал поставить и все таже тупость :(

POS_troi 01.12.2009 23:13

Знач так (опять действительно для С++)

В Экшене формы Resize ставим такой код

Код:


if(this->WindowState == FormWindowState::Minimized)
                        {
                                this->ShowInTaskbar = FALSE;
                        }

У мну все работает

SultanOFF 01.12.2009 23:26

resize тоже обрабатываю и все равно..ппц видимо придется перехватывать минимизацию :(

ZdezBilYa 01.12.2009 23:27

Нашел такое для Delphi:
Как среагировать на минимизацию формы перед тем как произойдет изменение?
при сворачивании - пищит динамик
Код:

type

TForm1 = class(TForm)

private

{Private declarations}

  procedure WMSysCommand(var Msg: TWMSysCommand);

    message WM_SYSCOMMAND;

public

{Public declarations}

end;


procedure TForm1.WMSysCommand;

begin

if (Msg.CmdType = SC_MINIMIZE)  then

  MessageBeep(0)

else

  inherited;

end;


SultanOFF 01.12.2009 23:37

Код:

procedure TForm1.WMSysCommand;

begin

if (Msg.CmdType = SC_MINIMIZE)  then
 begin
 Application.CreateHandle;
ShowWindow(Application.Handle, SW_HIDE);
Application.ShowMainForm := FALSE;
  end
else

  inherited;
end;

по идее должно скрывать иконку с трея, а все равно нифига! Может есть еще какой нить хороший компонент для работы с треем?

ZdezBilYa 01.12.2009 23:43

Цитата:

Сообщение от SultanOFF
Может есть еще какой нить хороший компонент для работы с треем?

в составе Raize Components есть компонент TRzTrayIcon

SultanOFF 01.12.2009 23:44

хорошо, завтра посмотрю и отпишусь, спасибо :)

Markus_13 02.12.2009 02:18

имхо - бред - для подобной мелочи юзать какие-то компоненты, есть прекрасная функция в ShellApi - называется Shell_NotifyIcon

Пример приложения, сворачивающегося в трей:
Код:

unit Unit1;
interface
uses Windows,Messages,SysUtils,Forms,ShellApi;
const WM_ICO_0D=WM_USER+13; ticID=12345;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  public
//месага отсылаемая окну
    procedure wmIco(var msg:TMessage);message WM_ICO_0D;
  end;

var Form1:TForm1;

implementation

//процедура добавления иконки в трэй (разобраться несложно)
procedure trayAdd(win:tHandle;id:cardinal;ico:hIcon;
msg:cardinal;tip:string);var nid:TNotifyIconData;
begin fillChar(nid,sizeOf(tNotifyIconData),0);with nid do
begin cbSize:=sizeOf(tNotifyIconData);wnd:=win;uID:=id;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage:=msg;hIcon:=ico;if length(tip)>63 then
setLength(tip,63);strPCopy(szTip,tip);end;
Shell_NotifyIcon(NIM_ADD,@nid);end;

//процедура удаления иконки
procedure trayDel(win:tHandle;n:Integer);var nid:tNotifyIconData;
begin with nid do begin cbSize:=sizeOf(tNotifyIconData);
wnd:=win;uID:=n;end;Shell_NotifyIcon(NIM_DELETE,@nid);end;

{$R *.dfm}

procedure TForm1.wmIco(var msg:TMessage);begin
//если кликнули по иконке левой или правой кнопкой мыши
if(msg.lParam=$0202)or(msg.lParam=$0205)then begin
//"переключаем" видимость окна
if isWindowVisible(Form1.Handle)then showWindow(Form1.Handle,sw_hide)
else showWindow(Form1.Handle,sw_show);
end;end;

procedure TForm1.FormCreate(Sender: TObject);begin
//добавляем иконку при создании формы
trayAdd(Handle,ticID,application.Icon.Handle,wm_ico_0d,application.Title);end;

procedure TForm1.FormActivate(Sender: TObject);begin
//убираем окно проги с панели приложений
ShowWindow(application.Handle,sw_hide);end;

procedure TForm1.FormDestroy(Sender: TObject);begin
//удаляем иконку при уничтожении формы
trayDel(Form1.Handle,ticid);end;

end.


SultanOFF 02.12.2009 20:01

проблему решил так:
Код:

procedure TForm1.FormCreate(Sender: TObject);
var ExtendedStyle:dword; w:hwnd;
begin
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(application.Handle, GWL_EXSTYLE,ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
with Application do begin
  ShowWindow(Handle, SW_HIDE);
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);


end;

теперь иконки нет на панели задач, Я счастлив :) Спасибо всем кто пытался помочь


Время: 19:17