mell Опубликовано 5 июня, 2014 Поделиться Опубликовано 5 июня, 2014 (изменено) Добрый день! Вопрос следующий: переделываю компонент с vcl на firemonkey и столкнлся с прооблемой обработки событий. Вот допустим в моем компоненте основой служит TLayout, а на нем лежит TImage. На Timage повесил обработку по щелчку мыши. Если Timage варавнивается по левому например краю, то обработчик срабатывает, но вот что я вижу на экране Если выравниваю по клиенту, то показывает одно изображение, но обработчик не работает. Вообщем что это, я видимо что то не понимаю в работе firemonkey, подскажите пожалуйста. component.zip Изменено 14 июня, 2014 пользователем Brovin Yaroslav Прикреплен файл проекта Цитата Ссылка на комментарий
0 mell Опубликовано 5 июня, 2014 Автор Поделиться Опубликовано 5 июня, 2014 (изменено) Если установить FImage.Stored := False; FImage.HitTest := True; FImage.Locked := True; То нормально отрабатывает. Но что если у меян 10 Timage один под другим, и все заполнены по клиенту, bringtofron не работает Изменено 5 июня, 2014 пользователем Brovin Yaroslav Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 5 июня, 2014 Администраторы Поделиться Опубликовано 5 июня, 2014 Нужен код вашего компонента и проекта, на котором это воспроизводится. Потому что: BringToFront и SendToBack отлично работают на TImage, брошенных на форму (только что проверил) У TImage по умолчанию установлено HitTest = True, а это значит, что контрол перехватывает события мыши по умолчанию. У TImage по умолчанию WrapMode установлен в Fit, а в этом случае картинка подгоняется с сохранением пропорций под размер контрола. Поэтому ситуация с дублирование картинки не возможна в таком режиме. Цитата Ссылка на комментарий
0 mell Опубликовано 5 июня, 2014 Автор Поделиться Опубликовано 5 июня, 2014 constructor TBitMapFM.Create(AOwner: TComponent); begin inherited; FPfan:='C:\daSystem\pmView\maps\map0\'; //Create original Image FImage:=TImage.Create(self); FImage.Parent:=self; FImage.Bitmap.LoadFromFile(FPfan + 'Image.bmp'); FImage.Align:=FMX.Types.TAlignLayout.Client; FImage.WrapMode:=FMX.Objects.TImageWrapMode.Fit; FDetectorLayer:=TImage.Create(self); FDetectorLayer.Parent:=self; FDetectorLayer.Bitmap.LoadFromFile(FPfan+'Detector.png'); FDetectorLayer.Align:=FMX.Types.TAlignLayout.Client; FDetectorLayer.WrapMode:=FMX.Objects.TImageWrapMode.Fit; FDetectorLayer.Stored := False; FDetectorLayer.HitTest := true; FDetectorLayer.Locked := true; FDetectorLayer.OnMouseMove:=MouseMoveONFFImage; FDetectorLayer.OnMouseDown:=MouseDownONFFImage; end; Вот смотрите, мне нужно чтобы FImage всегда лежал внизу, а сверху быд детектор(всегда), и что бы на детекторе отрабатывались события, между подложкой и детектором может быть до 15-20 png изображений Вот если их на форму кинуть просто, то все отлично работает, а если я делаю этот слоеный торт как компонент, то не работает Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 5 июня, 2014 Администраторы Поделиться Опубликовано 5 июня, 2014 (изменено) Видимо вы меня не поняли. Обратите внимание на пункт 2.2.5 правил. Потому что на текущий момент вы мне рассказываете, что у вас якобы не работает какой-то функционал. А я проверяю на чистом проекте и все работает. Отсюда должна напрашиваться только две мысли, что вы видимо что-то не правильно делаете, либо не полностью рассказываете. Поэтому нужно прикрепить полностью проект, чтобы я мог быстро посмотреть и сразу вам ответить (если вы конечно сами заинтересованы в решении вашей задачи). Так же опять же, судя по коду, не может быть ситуации, когда ваше изображение повторяется и отображается, как Tile. Хотя вы даже прикрепили скриншот, что якобы у вас на вашем коде это воспроизводится. (опять же выкладывайте проект с минимальным кодом) Я не знаю, как вы делаете "слоеный торт". Эта метафора может содержать тысячу и один способ достижения этого. И опять же я не умею читать мысли и не смогу по такому описания помочь вам решить задачу. Выкладывание проекта с кодом, где показано, как вы это делаете, снимает все ненужные и лишние вопросы, И снижает затраты на долгое выяснение деталей. Изменено 5 июня, 2014 пользователем Brovin Yaroslav Nix0N 1 Цитата Ссылка на комментарий
0 mell Опубликовано 12 июня, 2014 Автор Поделиться Опубликовано 12 июня, 2014 Спасибо, я разобрался вроде бы, вот код моего проекта, так на вскидку, правильно ли я концепцию понимаю. Очень мало про firemonkey написано в интернете, туториала с нуля я так и не нашел, поэтому исслудею все по опыту. Скйчас такой вопрос: я создаю в компоненте кнопочки две, в design они нормально и првильно тображаются, но в run time они как будто терют свои настройки, позицию , размер, надо что то со стилем делать их? Вы вот здесь еще писали: Чтобы легче было понимать, нужно разобраться со следующими основополагающими темами по созданию компонентов: Сериализация/Десериализация компонентов в DesingTime. Назначение Design Time и Run Time В чем отличие работы контролов в Design Time и RunTime Где про это можно почитать? http://rusfolder.com/40966672 Забыл добавить, кнопка отрабатывает нажатие. Цитата Ссылка на комментарий
0 rareMax Опубликовано 12 июня, 2014 Поделиться Опубликовано 12 июня, 2014 TComponent - одинаковый класс как для ВЦЛ так и для ФМХ(если не ошибаюсь). Поэтому попробуйте поискать нужную инфу для ВЦЛ. Цитата Ссылка на комментарий
Вопрос
mell
Добрый день!
Вопрос следующий: переделываю компонент с vcl на firemonkey и столкнлся с прооблемой обработки событий.
Вот допустим в моем компоненте основой служит TLayout, а на нем лежит TImage.
На Timage повесил обработку по щелчку мыши.
Если Timage варавнивается по левому например краю, то обработчик срабатывает, но вот что я вижу на экране
Если выравниваю по клиенту, то показывает одно изображение, но обработчик не работает.
Вообщем что это, я видимо что то не понимаю в работе firemonkey, подскажите пожалуйста.
component.zip
Изменено пользователем Brovin YaroslavПрикреплен файл проекта
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.