-
данный элемент при визуальном проектировании, берет готовый файл иконки и добавляет ее отдельно в ресурсы приложения, как специально выделенную для себя любимого почему бы не сделать свойство логического типа UseMainIcon для того, чтобы подключалась уже используемая иконка приложения? один фиг 90% прог используют главную иконку + экономия на размере
-
Кто нибудь, доступными средствами, может объяснить "неувядаемую" любовь программистов к KOL?
-
> доступными средствами
невозможно - забанят и посты сотрут
-
А зачем ей увядать? Я вообще думаю, что на базе КОЛ можно было бы отдельную IDE сделать с визуальным конструктором. А то МСК - костыль костылем. Вообще, попробовав писать с использованием этой библиотеки, и поняв насколько это на самом деле удобно и просто, не могу понять почему любовь к КОЛ увядает. Почему изначально Delphi не сделали по этим принципам.
-
> Sheleh (19.02.15 19:12) [3]
Почему бы не использовать Delphi?
-
> Почему бы не использовать Delphi? Вы, уважаемый, походу даже не понимаете о чем речь и совершенно не разбираетесь в предмете разговора. КОЛ+MCK работает под Delphi. VCL громоздка и не экономна в плане кода. Приложения же КОЛ имеют маленький размер и совершенно не уступают VCL'овским по функциональности.
-
> почему бы не сделать свойство логического типа UseMainIcon > для того, чтобы подключалась уже используемая иконка приложения? >
procedure TForm1.KOLForm1FormCreate(Sender: PObj); begin TrayIcon1.Icon := LoadIcon(hInstance, 'MAINICON'); TrayIcon1.Active := TRUE; end;
P.S. Изначально Active = false.
-
> Vladimir Kladov © (20.02.15 13:51) [6]
яж не спрашивал как, а предложил улучшить MCK :(
-
В структуре 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; При чем количество нарисованных единиц примерно совпадает с количеством приложений, добавляющих свои иконки в трей.
-
Я так понимаю, Шелех делает контейнер для трэй-иконок? Если так, то все вроде правильно - WM_COPYDATA. Только если под Vista/7/выше, там декларации расширеннее, чем в XP/ниже. И в msdn мало инфы про это. Если мне память не изменяет, конечно. Помнится, в Астоне с чем-то подобным проблемы были.
Поищу у себя в архивах, гдето было... Позже кину.
|