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

Teslinskiy

Пользователи
  • Постов

    0
  • Зарегистрирован

  • Посещение

Активность репутации

  1. Like
    Teslinskiy отреагировална Brovin Yaroslav в [XE7] [TEdit] [Отклонение] Не срабатывает событие OnClick у TEdit   
    Хорошо, что задали этот вопрос. Потому, что я вспомнил о более лаконичном и удобном решении. Чем тот, что я вам предложил.
    В XE7 был переведен на MVC модель. В итоге, TEdit позволяет не создавая наследников менять и дополнять работу TEdit. Идея простая, у TEdit есть несколько представлений, которые полностью осуществляют работу TEdit. Чтобы исправить это отклонение, нужно создать новое представление и заменить текущей TStyledEdit на новое, исправленное:
    unit FMX.Edit.MyStyle; interface uses FMX.Edit.Style, FMX.Controls.Presentation, System.UITypes, System.Classes; type // Новое представление - расширение текущего TMyStyledEdit = class(TStyledEdit) protected procedure MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; end; // Промежуточный класс TMyStyledEditProxy = class(TPresentationProxy) protected function CreateReceiver: TObject; override; end; implementation uses System.SysUtils, FMX.Presentation.Factory, FMX.Types; { TMyStyledEditProxy } function TMyStyledEditProxy.CreateReceiver: TObject; begin Result := TMyStyledEdit.Create(nil); end; { TMyStyledEdit } procedure TMyStyledEdit.MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); var Control: IControl; begin inherited; if Supports(PresentedControl, IControl, Control) then Control.MouseClick(Button, Shift, X, Y); end; initialization // Для всех TEdit удаляем базовое представление TPresentationProxyFactory.Current.Unregister('Edit-Style'); // Для всех TEdit регистрируем наше представление TPresentationProxyFactory.Current.Register('Edit-Style', TMyStyledEditProxy); finalization // Восстанавливаем старое представление Edit TPresentationProxyFactory.Current.Unregister('Edit-Style'); TPresentationProxyFactory.Current.Register('Edit-Style', TStyledEditProxy); end. Где немного упоминается о новом подходе:
    Нативные элементы управления Куда пропали методы DoChangeTracking и Change? Для исправления, достаточно добавить этот файл в проект. Этого будет достаточно.
     
    Проект: NewEditPresentation.zip
  2. Like
    Teslinskiy отреагировална Brovin Yaroslav в [XE7] [TEdit] [Отклонение] Не срабатывает событие OnClick у TEdit   
    Добрый день,
     
    Это ошибка, ее устранили в будущей новой версии среды. Для обхода проблемы в других версиях среды, нужно использовать следующий подход:
    var StyledPresentation: TStyledControl; begin StyledPresentation := nil; if Edit1.HasPresentationProxy then StyledPresentation := Edit1.PresentationProxy.Receiver as TStyledControl; if StyledPresentation <> nil then StyledPresentation.OnClick := Edit1Click; // <-- программно задать свой обработчик end; Код для С++ Builder:
    void __fastcall TForm2::FormCreate(TObject *Sender) { TStyledControl* styledPresentation; if (Edit1->HasPresentationProxy()) { styledPresentation = dynamic_cast<TStyledControl*>(Edit1->PresentationProxy->Receiver); styledPresentation->OnClick = Edit1Click; // <-- программно задать свой обработчик } }
×
×
  • Создать...