Значок в трее нельзя щелкнуть при запуске программы Delphi в качестве бесшовного приложения Citrix

Я использую библиотеку Jedi и компонент JvTrayIcon. Это работает нормально. Но когда программа запускается как бесшовное приложение Citrix, она не получает никаких событий кликов. Я много искал, но нашел только кое-что о значках панели задач и Delphi (Borland). Я использую Delphi 2010. Кто-нибудь сталкивался с этой проблемой?

--Мартин


person user1611655    schedule 20.08.2012    source источник
comment
Какие сообщения прослушивает это уведомление в трее для кликов?   -  person David Heffernan    schedule 20.08.2012
comment
Набор сообщений и некоторая адаптация к версии Windows jvcl.svn.sourceforge.net/viewvc/jvcl/trunk/jvcl/run/   -  person Arioch 'The    schedule 20.08.2012
comment
Кажется, для позиционирования значков используется ReadProcessMemory. Это, возможно, не будет организовано в Citrix?   -  person Arioch 'The    schedule 20.08.2012
comment
@David Hefferman, он использует OnClick и OnDblClick. И прилагается всплывающее меню.   -  person user1611655    schedule 20.08.2012
comment
ЧитатьПроцессПамять?! О боже, это совсем отстой. В этом нет необходимости.   -  person David Heffernan    schedule 20.08.2012
comment
@user1611655 user1611655 Вы говорите об событиях, процедурах вашей программы, которые вызывает компонент. Дэвид рассказал о сообщениях — целочисленных константах, которые уровень Windows GDI ставит в очередь для компонента, сообщающего об активности пользователя. msdn.microsoft.com/en-us/library/windows/ рабочий стол/ms644943.aspx   -  person Arioch 'The    schedule 20.08.2012
comment
Работает ли встроенный Delphi TTrayIcon, используемый в связанном примере?   -  person LU RD    schedule 20.08.2012
comment
@David унаследован от времен RxLib, где требовалась совместимость на уровне исходного кода от 16-битной Delphi 1 до Delphi 5. Я точно не знаю, для чего это нужно - есть URL какой-то статьи, но я не смотрел - но, возможно, у них были свои причины. Tray API — вещь убогая, а в более ранних виндах, наверное, еще хуже. Однако, для чего я помню, начиная с Delphi 5, есть стандартный компонент VCL, и можно было бы избежать использования RxLib/JediVCL?   -  person Arioch 'The    schedule 20.08.2012
comment
Значок уведомления @arioch API передает координаты в сообщениях, которые он отправляет   -  person David Heffernan    schedule 20.08.2012
comment
Что ж, Давид, ссылка выше, если хочешь, можешь просто грыпать и делать более обоснованные предложения. Я просто не знаю, да и не особо интересуюсь.   -  person Arioch 'The    schedule 20.08.2012
comment
@arioch Я бы просто отказался от компонента и использовал что-то более разумное. Мне тоже неинтересно его изучать.   -  person David Heffernan    schedule 20.08.2012
comment
@LU RD, завтра проверю.   -  person user1611655    schedule 21.08.2012
comment
В настоящее время в системе отслеживания проблем джедаев нет ничего, что могло бы охватить эту ситуацию. Судя по тому, что я вижу, Citrix и хак readprocessmemory в JvTrayIcon действительно несовместимы.   -  person Warren P    schedule 21.08.2012
comment
Я протестировал стандартную иконку D2010 в трее, и все, что мне нужно, работает; наведите курсор и щелкните.   -  person user1611655    schedule 22.08.2012
comment
@WarrenP ну, если просишь, то #5963 :-)   -  person Arioch 'The    schedule 23.08.2012
comment
@LURD - кажется, один из нас должен опубликовать ответ, чтобы использовать стандартный трей-значок VCL ;-)   -  person Arioch 'The    schedule 23.08.2012
comment
@Arioch'The, ответ опубликован, спасибо.   -  person LU RD    schedule 23.08.2012
comment
@Arioch 'The: ReadProcessMemory вызывается только в том случае, если вы сами используете класс TTrayIconEnumerator или если вы явно вызываете RefreshTray или TJvTrayIcon.GetIconRect. Ни один из них не используется самим компонентом. Так что это не может быть проблемой с ReadProcessMemory, поскольку он не вызывается.   -  person Andreas Hausladen    schedule 24.08.2012
comment
@AndreasHausladen Мы не видели кода автора темы, и, кажется, никто из нас не использует Citrix. Так что мы можем только верить, что это не удалось для него. Эти класс и метод предоставляются и не обескураживают. Кстати, есть еще процедура RefreshTray, использующая перечислитель. Но что ж, должен признать, что уменьшение JVCL как по глубине, так и по ширине стало для меня своего рода идеей фикс в последние годы :-)   -  person Arioch 'The    schedule 24.08.2012


Ответы (1)


Вместо значка jvcl в трее я предлагаю использовать встроенный Delphi TTrayIcon.

person LU RD    schedule 23.08.2012