Конференция "KOL" » TrayIcon [Delphi, Windows]
 
  • QAZ (19.02.15 14:51) [0]
    данный элемент при визуальном проектировании, берет готовый файл иконки и добавляет ее отдельно в ресурсы приложения, как специально выделенную для себя любимого
    почему бы не сделать свойство логического типа UseMainIcon для того, чтобы подключалась уже используемая иконка приложения?
    один фиг 90% прог используют главную иконку + экономия на размере
  • Smile © (19.02.15 15:11) [1]
    Кто нибудь, доступными средствами, может объяснить "неувядаемую" любовь программистов к KOL?
  • QAZ (19.02.15 15:14) [2]

    > доступными средствами

    невозможно - забанят и посты сотрут
  • Sheleh (19.02.15 19:12) [3]
    А зачем ей увядать? Я вообще думаю, что на базе КОЛ можно было бы отдельную IDE сделать с визуальным конструктором. А то МСК - костыль костылем. Вообще, попробовав писать с использованием этой библиотеки, и поняв насколько это на самом деле удобно и просто, не могу понять почему любовь к КОЛ увядает. Почему изначально Delphi не сделали по этим принципам.
  • Smile © (19.02.15 20:19) [4]
    > Sheleh   (19.02.15 19:12) [3]


    Почему бы не использовать Delphi?
  • Dimaxx © (20.02.15 11:49) [5]
    > Почему бы не использовать Delphi?
    Вы, уважаемый, походу даже не понимаете о чем речь и совершенно не разбираетесь в предмете разговора. КОЛ+MCK работает под Delphi. VCL громоздка и не экономна в плане кода. Приложения же КОЛ имеют маленький размер и совершенно не уступают VCL'овским по функциональности.
  • Vladimir Kladov © (20.02.15 13:51) [6]

    > почему бы не сделать свойство логического типа UseMainIcon
    > для того, чтобы подключалась уже используемая иконка приложения?
    >

    procedure TForm1.KOLForm1FormCreate(Sender: PObj);
    begin
       TrayIcon1.Icon := LoadIcon(hInstance, 'MAINICON');
       TrayIcon1.Active := TRUE;
    end;


    P.S. Изначально Active = false.
  • QAZ (20.02.15 15:31) [7]

    > Vladimir Kladov ©   (20.02.15 13:51) [6]

    яж не спрашивал как, а предложил улучшить MCK :(
  • Sheleh (26.02.15 04:20) [8]
    В структуре PNotifyIconData.hIcon на что ссылается hIcon?
    Например WM_GETICON возвращает хендл иконки, который уничтожать не требуется, иконка уже создана программой, и для ее отображения достаточно указателя. Пока её приложение не завершиться или не уничтожит ресурс иконка будет доступна по ее хендлу.

    А в PNotifyIconData.hIcon разве как то по-другому? Иконка уничтожается сразу после отправки сообщения трею?

    Вот тут я принимаю структуру:
    function Shell_TrayWndProc(Sender: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
    var pcd: PCopyDataStruct;
       NID: PNotifyIconData;
       WM_TASKBARCREATED: UINT;
       i:Byte;
    begin
     Result := False;
     with GlobalData^ do
      case Msg.message of
       WM_CREATE:
         begin
           WM_TASKBARCREATED := RegisterWindowMessage('TaskbarCreated');
           PostMessage(HWND_BROADCAST, WM_TASKBARCREATED, 0, 0);
         end;
       WM_COPYDATA: //Если пришли данные для окна Shell_TrayWnd
         begin
           pcd := PCOPYDATASTRUCT(msg.lParam);
           if pcd^.dwData = 1 then
            begin
              NID := pointer(integer(pcd.lpData) + 8);
              case integer(pointer(integer(pcd.lpData) + 4)^) of
                NIM_ADD:
                 if IsWindow(NID.Wnd) then //Проверяем если окно - родитель иконки
                  begin
                    i:=0;
                    while TrayIcon[i].Icon>0 do i:=i+1; //Выясним индекс первой пустой записи
                    TrayIcon[i].Icon:=NID.hIcon;
                    invalidateRect(Shell_TrayForm, nil, True);
                  end;
              end;
            end;
         end;
      end;
    end;


    А вот здесь пытаюсь рисовать
    procedure TShell_Tray.PaintShell_Tray(Sender: PControl; DC: HDC );
    var i: byte;
    begin
     i:=0;
     with GlobalData^ do
      begin
        while TrayIcon[i].Icon>0 do
         begin
           DrawIconEx(DC, i*17, 5, TrayIcon[i].Icon, 16, 16, 0, 0, DI_NORMAL); //Ничего не рисует
           TextOut(DC, i*17, 0, '1',1);//А этот код рисует единицу как положено
           i:=i+1;
         end;
      end;
    end;

    При чем количество нарисованных единиц примерно совпадает с количеством приложений, добавляющих свои иконки в трей.
  • ParanoiS © (03.03.15 20:42) [9]
    Я так понимаю, Шелех делает контейнер для трэй-иконок? Если так, то все вроде правильно - WM_COPYDATA. Только если под Vista/7/выше, там декларации расширеннее, чем в XP/ниже. И в msdn мало инфы про это. Если мне память не изменяет, конечно. Помнится, в Астоне с чем-то подобным проблемы были.

    Поищу у себя в архивах, гдето было... Позже кину.
 
Конференция "KOL" » TrayIcon [Delphi, Windows]
Есть новые Нет новых   [118675   +66][b:0][p:0]