Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

TrayIcon [Delphi, Windows]


QAZ   (19.02.15 14:51

данный элемент при визуальном проектировании, берет готовый файл иконки и добавляет ее отдельно в ресурсы приложения, как специально выделенную для себя любимого
почему бы не сделать свойство логического типа 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 мало инфы про это. Если мне память не изменяет, конечно. Помнится, в Астоне с чем-то подобным проблемы были.

Поищу у себя в архивах, гдето было... Позже кину.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо