繁体   English   中英

在屏幕上显示窗体时触发的事件

[英]Event that fires when form is made visible on screen

我有一个需要花费一些时间来创建的表单,我想向用户展示正在发生的事情,当我调用显示该表单的函数时,我已经用了一个沙漏光标。 但是我的问题是我无法获得

Screen.Cursor := crDefault;

当窗体实际显示在屏幕上时首先执行。 我尝试了所有尝试尝试但没有运气的事件。 在看到表单之前,沙漏消失了。

接下来我要尝试什么才能使它正常工作。

我需要更多信息,请这样说,我会找到的。

在调用创建表单的函数之前,我在主表单中设置了沙漏,然后显示了如下的表单。

procedure TfrmJsCv.FormShow(Sender: TObject);
begin
  fReportFile := Folders.DirDatabase + 'jobsearch_print.mdb';
  btnPrint.Visible := FileExists(fReportFile);
  try
    SetupMain;
    SetupCertificates;
    SetupContacts;
    SetupCourse;
    SetupJobs;
    SetupLanguage;
    SetupLanguageLevels;
    SetupItKnowledge;
    SetupKnowledgeLevels;
    SetupKnowledgeTypes;
    SetupOther;
    SetupReferences;
    SetupSchool;
    SetupYears;
  except
    on E: exception do
      Logfile.Error('F_JsCv.FormShow: ' + E.Message);
  end;
  PagCurriculumVitae.ActivePageIndex := 0;
end;

我试图把Screen.Cursor:= crDefault; 在OnActivate,OnCreate,OnShow,OnResize,OnPaint事件上,但在表单准备就绪/在屏幕上可见之前重置了沙漏

所有Setupxxxxx过程都是为复杂的表单准备数据的过程-它从12个不同的表中收集数据。

您是否以模态显示表单? 在这种情况下,通过调用ShowModal会取消crHourGlass设置,其中调用Screen.Cursor := crDefault; 被制造。 参见Vcl.Forms单元, function TCustomForm.ShowModal: Integer; 7139行(XE7源)。

解决方法是调用Screen.Cursor := crHourGlass; 在所有那些SetupXXX调用和Screen.Cursor := crDefault;之前,先在TfrmJsCv.FormShow()进行Screen.Cursor := crDefault; 后。

既然OP确认以表格形式显示了表格,我认为更多的解释可能会对将来的读者有所帮助。

OP说:

“沙漏在表格可见之前就消失了。”
“在调用创建表单的函数之前,我在主表单中设置了沙漏……”

因此,他的主要形式如下:

  Screen.Cursor := crHourGlass;
  frmJsCv.ShowModal

最终以Vcl.Forms.TCustomForm.ShowModal

...
SaveCursor := Screen.Cursor;
Screen.Cursor := crDefault;
SaveCount := Screen.CursorCount;
...
try
  Show;  // 
  try
    // message loop
  finally
    Hide;
  end;
finally
  if Screen.CursorCount = SaveCount then
    Screen.Cursor := SaveCursor
  else Screen.Cursor := crDefault;
  ...
end;

显然,这样做的目的是让模式形式根据需要操纵光标,然后将光标恢复到调用ShowModal之前的状态。 至少在Delphi 7中,这是相同的。

请注意,普通Show不会执行上述操作。

设置的另一个作用crHourGlass调用的ShowModal之前,并没有设置crDefault回来之后会同时显示的形式,但随后马上光标仍然不会显示为沙漏。 这可能和以下解释一样令人困惑:)

暂无
暂无

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

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