Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Изменение иконки в систрее


Автор: Budy 6.6.2005, 11:09
:Приветствую
Делаю себе иконку в систрей, и попутно возникают вопросы:
Создаю во как:
Код

var
  Form1: TForm1;
  Nid:TNotifyIconData;
  
procedure TForm1.FormCreate(Sender: TObject);
begin
  with nid do begin
   cbSize:=SizeOf(TNotifyIconData);
   Wnd:=Form1.Handle;
   uID:=1;
   uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
   uCallbackMessage:=WM_USER+100;
   hIcon:=Application.Icon.Handle;
   StrPCopy(szTip,Caption);
  end;
  Shell_NotifyIcon(NIM_ADD,@nid); 
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveOptions;
  with nid do begin
    cbSize:=SizeOf(TNotifyIconData);
    Wnd:=Form1.Handle;
    uID:=1;
    uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage:=WM_USER+100;
    hIcon:=Application.Icon.Handle;
    StrPCopy(szTip,Caption);
  end;
  Shell_NotifyIcon(NIM_DELETE,@nid);
end;

А как мона ее картинку изменить? ну например взять из TImageList (желательно)

И еще, как мона убрать свое окно из TaskBar'а? (Вот как винампа делает)

Автор: ~FoX~ 6.6.2005, 12:10
Изменить:
Код

Shell_NotifyIcon(Nim_Modify,@Nid);


Скрыть:
Код

Procedure TForm1.ControlWindow(Var Msg:TMessage);
var
  ico: TIcon;
Begin
  ico := Application.Icon;
  IF Msg.WParam=SC_MINIMIZE then
    Begin
      Ic(1,ico); // Добавляем значок в трей
      ShowWindow(Handle, SW_HIDE); // Скрываем программу
      ShowWindow(Application.Handle, SW_HIDE);
    End
  else
    inherited;
End;

Добавлено @ 12:14
Выдрать из ImageList

Код

var
  i: TIcon;
begin
  try
    i := TIcon.Create;
    ImageList1.GetIcon(2, i);
  finally
    i.Free;
  end;
end;

Добавлено @ 12:15
А вообще в ФАКе есть пару примеров по работе с систреем.

Автор: Budy 6.6.2005, 13:16
~FoX~, сэнк. в ФАКе немного не то (ЗЫ.или я не все видел)

Автор: Budy 6.6.2005, 13:38
Меняю иконку:
Код

with Nid do
    try
      Ic:=TIcon.Create;
      SysTray.GetIcon(0,Ic);
      hIcon:=Ic.Handle;
    finally
      Ic.Free;
    end;
  Shell_NotifyIcon(NIM_MODIFY,@Nid);

Не канает. Остается старая
И со скрытием: я имел ввиду окно то остается видным, а его "эмблема" прячется с таскбара.

Автор: Quadr0 6.6.2005, 15:48
...

Автор: Quadr0 6.6.2005, 15:59
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)