私のアプリケーションには、キーボードのキーとして機能する多くの TRectangle があります。クリックすると音が鳴ります。これは、OnMouseDown および OnMouseUp イベントを処理することによって行われます。OnMouseDown: サウンドを送信し、OnMouseUp: スイッチをオフにします。1つのことを除いて、すべて正常に動作します。
Android では、複数の指を使って複数のキーを押すことができます。1 つの OnMouseDown が処理されると、OnMouseUp イベントが処理されるまで、他の OnMouseDown イベントは処理されません。他の OnMouseDown をブロックしたキーの OnMouseUp である必要はありません。任意の OnMouseUp イベントである可能性があります。サンプルコード:
procedure TKeyBoard.note_down (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
key: TKey;
begin
key := Sender as TKey;
logd ('Entering OnMouseDown event handler: %d', [key.Note]);
PutShort ($90, key.Note, 127);
logd ('Exiting OnMouseDown event handler: %d', [key.Note]);
end; // note_down //
procedure TKeyBoard.note_up (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
key: TKey;
begin
key := Sender as TKey;
logd ('Entering OnMouseUp event handler: %d', [key.Note]);
PutShort ($80, Key.Note, 127);
logd ('Exiting OnMouseUp event handler: %d', [key.Note]);
end; // note_up //
...
Rectangle [i].OnMouseDown := note_down;
Rectangle [i].OnMouseUp := note_up;
note_down および note_up ルーチンが開始され、デバッグ コードに従ってすぐに終了する場所。OnMouseDown が処理されると、OnMouseUp が処理されるまで OnMouseDown を処理できないと仮定するのは正しいですか? もしそうなら、回避策はありますか?