Хорошо, что задали этот вопрос. Потому, что я вспомнил о более лаконичном и удобном решении. Чем тот, что я вам предложил.
В 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