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

问题描述

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

  • 主要形式:它包含

    • 带有 2 个 TTabItems 的 TTabControl:我放置在第一个 TabItem1 按钮上..
    • 一个矩形:我在其中放置了带有文本“请稍候..”的 Label1,并将 Visible 属性设置为 False。
  • DataModule:sqlite 数据库,...

  • 一个 FireMonkey 框架:它包含 TListView 以显示来自 sqlite db 的数据,...

代码是这样的:

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 之前或期间不显示矩形。 我试了很多次,但矩形总是隐藏起来,没有出现。

任何帮助..

解决方法

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

首先,在您的表单上放置一个 try: comments = WebDriverWait(driver,20).until( EC.presence_of_all_elements_located((By.XPATH,relativeXpathToReportComments))) # some code to be executed if the elements is found except: print("could not find/get comments on comment page") 。您已经有了带有标签的矩形和其他组件。在我的测试中,我创建了一个 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