Переопределение onMouseMove препятствует работе onMouseUp - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть TreeViewItem, который onMouseUp не запускается, я попытался сжать свой сложный класс и смог создать рабочий пример onMouseUp, не работающего, кажется, переопределение onMouseMove вызываетэто поведение, которое является загадкой, потому что я использую onMouseUp, и я не переопределяю onMouseMove!
Как я могу исправить этот код?

unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.TreeView;

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MouseMove(Shift: TShiftState; X, Y: Single); override;
    procedure onItemMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm2.FormCreate(Sender: TObject);
var
  treeView: TTreeView;
  treeViewItem: TTreeViewItem;
begin
  treeView := TTreeView.Create(nil);
  treeView.Position.X := 0;
  treeView.Position.Y := 0;
  treeView.Width := 200;
  treeView.Height := 300;
  treeView.Parent := form2;

  treeViewItem := TTreeViewItem.Create(nil);
  treeViewItem.Parent := treeView;
  treeViewItem.Text := 'This is a test';
  treeViewItem.OnMouseUp := onItemMouseUp;
end;

procedure TForm2.onItemMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Single; Y: Single);
begin
  ShowMessage('onItemMouseUp');
end;

procedure TForm2.MouseMove(Shift: TShiftState; X: Single; Y: Single);
begin

end;

end.

1 Ответ

0 голосов
/ 06 декабря 2018

MouseMove(...) override; переопределяет все остальные onMouseMove, это обычно используется, если вам нужно обеспечить выполнение на MouseMove независимо от того, на какой объект вы фокусируете, так как вы переопределяете MoveMove, вы должны использовать ключевое словоInherited внутри тела, который обеспечит работу всех других onMouseMove, которые наследуются.
Так что вам просто нужно изменить MouseMove на это:

procedure TForm2.MouseMove(Shift: TShiftState; X: Single; Y: Single);
begin
  Inherited;
end;  
...