Виктор Опубликовано 25 июня, 2014 Поделиться Опубликовано 25 июня, 2014 Допусти есть некий стиль элемента, в этом стиле есть ButtonStyleObject HitTest у которого False. Как вызвать событие клика по этому элементу? В данном случаи интересует смена Bitmapa на PressetLink Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 25 июня, 2014 Администраторы Поделиться Опубликовано 25 июня, 2014 Триггеры вызываются автоматически на уровне TControl. То есть, когда пользовать нажимает на кнопку TButton, кнопка при:нажатии мышкой на кнопкуперемещении мыши по области кнопкивыходе из области кнопкиЗапускает процедуру срабатывания триггеров через:{ ITriggerEffect } procedure ApplyTriggerEffect(const AInstance: TFmxObject; const ATrigger: string); virtual; { ITriggerAnimation } procedure StartTriggerAnimation(const AInstance: TFmxObject; const ATrigger: string); virtual; procedure StartTriggerAnimationWait(const AInstance: TFmxObject; const ATrigger: string); virtual; Тем самым TControl передает этот вызов всем дочерним объектам кнопки. В том числе вашему TButtonStyleObject. Поэтому картинка в TButtonStyleObject сменится на базовом уровне и не нужно форсировать вызов. Вы описали не полностью вопрос, потому что начали вы с ручного вызова события, а кончили сменой картинки в TButtonStyleObject.На вторую часть я ответил выше. На первую часть вопроса, вы можете вытащить объект стиля, взять у него интерфейс IControl и вручную сэмулировать срабатывание клика, например так:var StyleObject: TFmxObject; StyleObjectControl: IControl; begin StyleObject := Button1.FindStyleResource('background'); if (StyleObject <> nil) and (StyleObject is TControl) then begin StyleObjectControl := IControl(StyleObject); StyleObjectControl.MouseDown(TMouseButton.mbLeft, [], 0, 0); StyleObjectControl.MouseClick(TMouseButton.mbLeft, [], 0, 0); StyleObjectControl.MouseUp(TMouseButton.mbLeft, [], 0, 0); end; end; Однако, я бы не стал придумывать велосипед.. Попробуйте уточнить, что именно вы хотите добиться. Цитата Ссылка на комментарий
0 Виктор Опубликовано 26 июня, 2014 Автор Поделиться Опубликовано 26 июня, 2014 Речь в данном случаи идет о стиле для combobox. Он состоит из общего ButtonStyleObject на котором расположены шрифт, контент и прочие, так же не нам расположен и еще один ButtonStyleObject на который повешена текстура стрелочки вниз. Везде Hittest:=False. Соотвественно контрол обрабатывает клик по всему элементу что полностью устраивает, однако во втором ButtonStyleObject при нажатии не меняется текстура с Normal на pressed, а надо что бы менялась. Я конечно сделал как предложено в дефолтном варианте с текстурами загруженными в основной контейнер ButtonStyleObject, но хотелось бы знать на будущие как можно реализовать нажатие на внутренний элемент стиля при условии что Hittest:=False.Предложенный вариант не сработал: [dcc32 Error] FotoOrder.pas(452): E2010 Incompatible types: 'IControl' and 'TFmxObject' В строке: StyleObjectControl := IControl(StyleObject); StyleObjectControl := IControl(StyleObject as IControl); При этом код заработал, но эффекта не произвел. Цитата Ссылка на комментарий
Вопрос
Виктор
Допусти есть некий стиль элемента, в этом стиле есть ButtonStyleObject HitTest у которого False. Как вызвать событие клика по этому элементу? В данном случаи интересует смена Bitmapa на PressetLink
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.