0

現在、ブロック (3d キューブ) があります。1 つをクリックすると、その上に別のブロックが作成されます。そのようです

procedure TForm2.cubeClick(sender: TObject);
var
  cube: Tcube;
begin
cube := Sender as Tcube;
if setblocks then
  begin
    totalblocks := totalblocks +1 ;
    CreateCube[totalblocks]:=tcube.Create(self);
    CreateCube[totalblocks].Visible := true;
    CreateCube[totalblocks].Name := 'cubename'+inttostr(totalblocks);
    CreateCube[totalblocks].Position.x := cube.Position.X;
    CreateCube[totalblocks].Position.Y := cube.Position.y;
    CreateCube[totalblocks].Position.Z := cube.Position.Z -1;
    CreateCube[totalblocks].Material.Texture.CreateFromFile(gamedir+'\pics\'+blocktype);
    CubeData[totalblocks] := blocktype;
    CreateCube[totalblocks].Material.Lighting := false;
    CreateCube[totalblocks].Material.Modulation := TTextureMode.tmReplace;
    CreateCube[totalblocks].Parent := viewport3d1;
    CreateCube[totalblocks].OnClick := cubeClick;
    CreateCube[totalblocks].OnMouseDown := mousedown;
  end;
   label2.Text := inttostr(10000 - totalblocks);
end;

私が抱えている問題は、十分に速くクリックすると、ブロックの追加が停止することです。理由は不明です。しかし、この手順全体が完了するまでマウスクリックを無効にできれば、それでうまくいくと思います。これはfiremonkeyでできることですか、誰でも方法を知っていますか?

ありがとうグレン

4

2 に答える 2

0

OnClickイベント ハンドラーを確実に無効にすることができます。いくつかの方法がありますが、最も簡単な方法は、OnClickプロパティをに設定することnilです。

ただし、これを行ってもプログラムに影響はありません。これは、イベントOnClickの実行中にフレームワークがプロパティの値を使用しないためです。OnClick入力イベントは再入可能ではありません。もしそうなら、UI プログラムを書くことは不可能に近いでしょう。

要するに、あなたの質問には簡単な答えがありますが、問題の解決には役立ちませんイベントハンドラーの期間を に設定OnClickしても、プログラムの動作は変わりません。nil

于 2013-09-13T17:03:18.283 に答える