如何在将框架加载到 TabItem 之前和期间显示矩形?
How do I make rectangle appear before and during loading frame into TabItem?
我的项目是针对使用 Delphi 的 Android 平台。
该项目包括:
主要形式:包含
- 带 2 个 TTabItems 的 TTabControl:我放在第一个 TabItem1 按钮上..
- 一个矩形:我在其中放置了带有文本 'Please wait ..' 的 Label1,并将 Visible 属性 设置为 False。
数据模块:SQLite 数据库,...
一个 FireMonkey 框架:它包含 TListView 以显示来自 sqlite 数据库的数据,...
代码是这样的:
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;
我的项目是针对使用 Delphi 的 Android 平台。 该项目包括:
主要形式:包含
- 带 2 个 TTabItems 的 TTabControl:我放在第一个 TabItem1 按钮上..
- 一个矩形:我在其中放置了带有文本 'Please wait ..' 的 Label1,并将 Visible 属性 设置为 False。
数据模块:SQLite 数据库,...
一个 FireMonkey 框架:它包含 TListView 以显示来自 sqlite 数据库的数据,...
代码是这样的:
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;