如何在将框架加载到 TabItem 之前和期间显示矩形?

How do I make rectangle appear before and during loading frame into TabItem?

我的项目是针对使用 Delphi 的 Android 平台。 该项目包括:

代码是这样的:

uses ... , Unit1;

...
private
  fFrame1: TFrame1;

...

procedure TMainForm.Button1Click(Sender: TObject);
begin
  if fFrame1 = nil then
  begin
    Rectangle1.Visible := True;
    fFrame1 := TFrame1.Create(Application);
    fFrame1.Parent := TabItem2;
    Rectangle1.Visible := False;
  end;
    TabControl1.ActiveTab := TabItem2;
end;

Frame1 需要一些时间才能加载到 TabItem2 中,但一切都已正确完成.. 这里的问题是在加载 Frame1 之前或期间不显示矩形 .. 我已经尝试了很多次,但矩形总是隐藏并且没有出现。

任何帮助..

这是我的建议,包括用于测试的代码。这些额外步骤的目的是将按钮点击(和等待消息的显示)与耗时的帧创建断开。因此,应用程序有机会显示这些事件之间的等待消息。

首先,在您的表格上放一个 TTimer。您已经有了带有标签的矩形和其他组件。在我的测试中,我创建了一个 procedure SpendSomeTime(ms: integer); 来模拟帧创建的延迟。

然后 Button1Click():

procedure TForm36.Button1Click(Sender: TObject);
begin
  Label1.Text := 'Please wait ...';
  Rectangle1.Visible := True; // show the please wait ... msg
  Timer1.Enabled := True;   // the Timer1.Interval is preset to 1 ms.
end;

延时模拟程序

procedure TForm36.SpendSomeTime(ms: Integer);
const
  ms1: double = 1 / 24 / 60 / 60 / 1000;
var
  t: TTime;
begin
  t := now + ms1 * ms ;
  repeat
  until now >= t;
end;

OnTimer 事件,首先禁用计时器,因为我们只需要一次事件

procedure TForm36.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  SpendSomeTime(3000);         // simulate the slow creation of the frame
  Rectangle1.Visible := False; // The frame creation returns and we can hide the message
end;