![]() |
![]() ![]() ![]() | |
|
Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|| Форумы Здесь вы можете задать свой вопрос и наверняка получите ответ |
ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
| ||
![]() | ||
|
Чтобы не потерять эту дискуссию, сделайте закладку
« предыдущая ветвь | форум | следующая ветвь »
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 мало инфы про это. Если мне память не изменяет, конечно. Помнится, в Астоне с чем-то подобным проблемы были.
Поищу у себя в архивах, гдето было... Позже кину.
Разрешается использование тегов форматирования текста:
версия для печати
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)
|
![]() ![]() ![]() |