繁体   English   中英

在窗体上移动按钮时发生Delphi访问冲突

[英]Delphi Access Violation when moving button on form

我正在尝试使用while循环检查按钮的left属性来在窗体上移动2个按钮,但是我遇到了访问冲突。 我正在用CreateThread()执行该过程

The code:

procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin

  try

       while (b2 <> 187) do
       begin
           b2 := frmNotification.btnBuzina2.Left;
           frmNotification.btnBuzina2.Left := b2 - 1;

       end;

       while (b1 <> 256) do
       begin
           b1 := frmNotification.btnBuzina.Left;
           frmNotification.btnBuzina.Left := b1 - 1;

       end;

  except;
  end;

end;

但是,当我使用Sleep()至少5毫秒时,我没有访问冲突,如下所示:

procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin

  try

       while (b2 <> 187) do
       begin
           b2 := frmNotification.btnBuzina2.Left;
           frmNotification.btnBuzina2.Left := b2 - 1;
           Sleep(5);
       end;

       while (b1 <> 256) do
       begin
           b1 := frmNotification.btnBuzina.Left;
           frmNotification.btnBuzina.Left := b1 - 1;
           Sleep(5);
       end;

  except;
  end;

end;

有人可以帮我找出为什么没有睡眠我会遇到访问冲突而我却没有吗?

提前谢谢!

我正在使用CreateThread()执行该过程。

那是你的问题。 VCL代码只能从主UI线程调用。 使用TThread.Synchronize在主线程上调用VCL代码。

也就是说,计时器可能比线程更适合解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM