Firemonkey - Обработка сообщений - PullRequest
5 голосов
/ 08 февраля 2012

В настоящее время я пытаюсь разработать проект, основанный на Firemonkey.Я использую Firemonkey для его функций пользовательского интерфейса, так как проект состоит из множества небольших приложений, каждое из которых имеет 3D-аспект.В настоящее время я занимаюсь только разработкой / развертыванием в Windows с помощью инфраструктуры FMX, но в будущем я могу стать кроссплатформенным.

Я столкнулся с большинством проблем, с которыми столкнулся при создании приложения для VCL Windows.в фоновом режиме, чтобы выполнить очень конкретное действие, а затем построить интерфейс FMX.Однако это подходит только тогда, когда вы хотите выполнить приложение только для выполнения того действия, для которого оно предназначено, и, таким образом, можете выполнить приложение с параметрами.В одном из приложений я столкнулся с необходимостью использовать сообщения (или что-то подобное).Например, в моем приложении FMX, если я нажму «button1», я хочу, чтобы он отправлял сообщение фоновому приложению VCL для выполнения «action1», а не выполнял его с параметрами.

Хороший пример мог быиспользовать VCL TMediaPlayer в фоновом приложении, при этом внешнее приложение FMX используется для отображения информации и обеспечения управления воспроизведением, паузой и т. д., так что по сути он становится интерфейсом FMX с возможностью VCL.

Мне до сих пор не удалось найти что-либо о том, как обрабатываются сообщения (например, в VCL, они будут выполняться с помощью "SendMessage" или "PostMessage" или чего-то подобного)с Firemonkey, либо через локальный файл справки, либо через расширенный поиск в Google.Все, что я нашел, было связано с электронной почтой (предположительно из-за слова «Сообщение» в большинстве моих поисковых терминов).

Can anyone point me in the right direction on how messages would be handled with Firemonkey/FMX?

С уважением, Скотт Притчард

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

Насколько я понимаю, Firemonkey не основан на традиционных окнах, поэтому отправка оконных сообщений элементам управления Firemonkey обычно не вариант.Хотя некоторые элементы управления действительно используют окна (наиболее заметно, TCommonCustomForm), поэтому вы можете использовать функцию FmxHandleToHWND() в блоке FMX.Platform.Win для извлечения HWND из TFmxHandle при необходимости.Я понятия не имею, как получать и настраивать оконные сообщения в элементах управления FMX, если это вообще возможно.

Firemonkey под Windows имеет доступ к Win32 API, поэтому ничто не мешает отправлять оконные сообщениядругие оконные элементы управления, такие как ваш VCL UI.Включите модуль Winapi.Windows в ваше предложение uses для доступа к функциям Win32 API, точно так же, как в приложении VCL.

UPDATE : потому что FireMonkey не предоставляет доступ к сообщениям, которыеотправлены в окно формы, вы должны вручную создать подкласс окна для получения сообщений до того, как FireMonkey их увидит.Вы можете переопределить метод CreateHandle() формы, сначала вызвать метод inherited, чтобы создать окно, а затем использовать FmxHandleToHWND(), чтобы получить HWND, который можно подклассировать.Не забудьте также переопределить метод DestroyHandle(), чтобы удалить подкласс, прежде чем затем вызывать inherited, чтобы освободить HWND.

3 голосов
/ 10 февраля 2012

В настоящее время FireMonkey не имеет обработчика сообщений, который вы можете использовать для отправки и публикации сообщений.

Существует возможность подключить вещи с помощью прослушивателей, как FireMonkey работает внутри, но ни один из них не задокументирован.

Итак, вместо этого вот что я сделал:

Я создал свой собственный класс "message".Я создаю экземпляры класса и добавляю их в потокобезопасный список из любого потока, который мне нужен.В главном потоке у меня есть таймер, который проверяет список и обрабатывает «сообщения».

...