我的应用程序有很多trectangle作为键盘的键。当一个被点击你听到一个声音。这是通过处理onmousedown和onmouseup事件来完成的。onmousedown:发出声音,onmousedup:关闭。除了一件事,一切都很好。
在android上,我可以用几个手指按下几个键。处理完一个onmousedown后,在处理完onmouseup事件之前,不会处理其他onmousedown事件。不必是密钥的onmouseup阻止了另一个onmousedown,它可能是任何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;
其中NoToStION和NoffyUp例程被输入并根据调试代码立即退出。假设onmousedown被处理后,在onmousedup被处理之前不能处理onmousedown,这对吗?如果是的话,有解决办法吗?
最佳答案
给onmouseenter一个移动的机会。我正在做一个有很多矩形的项目,在我的代码中
{$ifdef MSWINDOWS}
lRect.OnClick := ClickEvent;
{$else}
lRect.OnMouseEnter := ClickEvent;
{$endif}
这允许我做的是将手指拖过一个矩形网格,并让它为我传递的每个矩形调用我的clickevent。