我的应用程序有很多 TRectangle 充当键盘的键。单击一个时,您会听到声音。这是通过处理 OnMouseDown 和 OnMouseUp 事件来完成的。OnMouseDown:发送声音和 OnMouseUp:将其关闭。一切正常,除了一件事。
在 Android 上,我可以用几根手指按几个键。当一个 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 是否正确?如果是这样,是否有解决方法?