移动表格

时间:2015-06-08 09:39:48

标签: delphi button access-violation

我正在尝试使用while循环检查表单上的2个按钮,检查按钮left属性,但是我有一个访问冲突。我正在使用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;

有人可以帮助我找出为什么没有睡眠我得到访问权限并且我不知道吗?

提前thx!

1 个答案:

答案 0 :(得分:7)

  

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

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

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