Перейти к содержанию
Fire Monkey от А до Я
  • 0

Обработка событий при создании своего компонента


mell

Вопрос

Добрый день!

Вопрос следующий: переделываю компонент с vcl на firemonkey и столкнлся с прооблемой обработки событий.

Вот допустим в моем компоненте основой служит TLayout, а  на нем лежит TImage.

На Timage повесил обработку по щелчку мыши.

Если Timage варавнивается по левому например краю, то обработчик срабатывает, но вот что я вижу на экране

857b9edd4307.png

 

Если выравниваю по клиенту, то показывает одно изображение, но обработчик не работает.

Вообщем что это, я видимо что то не понимаю в работе firemonkey, подскажите пожалуйста.

component.zip

Изменено пользователем Brovin Yaroslav
Прикреплен файл проекта
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Если установить

  FImage.Stored := False;
  FImage.HitTest := True;
  FImage.Locked := True;

То нормально отрабатывает.
Но что если у меян 10 Timage один под другим, и все заполнены по клиенту, bringtofron не работает

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий
  • 0
  • Администраторы

Нужен код вашего компонента и проекта, на котором это воспроизводится. Потому что:

  1. BringToFront и SendToBack отлично работают на TImage, брошенных на форму (только что проверил)
  2. У TImage по умолчанию установлено HitTest = True, а это значит, что контрол перехватывает события мыши по умолчанию.
  3. У TImage по умолчанию WrapMode установлен в Fit, а в этом случае картинка подгоняется с сохранением пропорций под размер контрола. Поэтому ситуация с дублирование картинки не возможна в таком режиме. 
Ссылка на комментарий
  • 0

 

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
  • Администраторы

Видимо вы меня не поняли. Обратите внимание на пункт 2.2.5 правил.

 

Потому что на текущий момент вы мне рассказываете, что у вас якобы не работает какой-то функционал. А я проверяю на чистом проекте и все работает. Отсюда должна напрашиваться только две мысли, что вы видимо что-то не правильно делаете, либо не полностью рассказываете. Поэтому нужно прикрепить полностью проект, чтобы я мог быстро посмотреть и сразу вам ответить (если вы конечно сами заинтересованы в решении вашей задачи).

 

Так же опять же, судя по коду, не может быть ситуации, когда ваше изображение повторяется и отображается, как Tile. Хотя вы даже прикрепили скриншот, что якобы у вас на вашем коде это воспроизводится. (опять же выкладывайте проект с минимальным кодом)

 

Я не знаю, как вы делаете "слоеный торт". Эта метафора может содержать тысячу и один способ достижения этого. И опять же я не умею читать мысли и не смогу по такому описания помочь вам решить задачу. Выкладывание проекта с кодом, где показано, как вы это делаете, снимает все ненужные и лишние вопросы, И снижает затраты на долгое выяснение деталей.

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий
  • 0

Спасибо, я разобрался вроде бы, вот код моего проекта, так на вскидку, правильно ли я концепцию понимаю.

Очень мало про firemonkey написано в интернете, туториала с нуля я так и не нашел, поэтому исслудею все по опыту.

 

Скйчас такой вопрос: я создаю в компоненте кнопочки две, в design они нормально и првильно тображаются, но  в run time они как будто терют свои настройки, позицию , размер, надо что то со стилем делать их?

 

Вы вот здесь еще писали:

 

 

Чтобы легче было понимать, нужно разобраться со следующими основополагающими темами по созданию компонентов:

  1. Сериализация/Десериализация компонентов в DesingTime.
  2. Назначение Design Time и Run Time
  3. В чем отличие работы контролов в Design Time и RunTime

Где про это можно почитать?

 

http://rusfolder.com/40966672

 

Забыл добавить, кнопка отрабатывает нажатие.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...