当窗体在屏幕上可见时触发的事件
我有一个需要一些时间来创建的窗体,我想向用户显示发生了某些事情,并且当我调用显示该窗体的函数时我做了一个沙漏光标形成。但我的问题是,我不能让屏幕上实际显示窗体时首先执行第一个执行的代码。 我尝试了所有的事情,使有点感觉尝试,但没有运气。表单可见之前沙漏已经消失。当窗体在屏幕上可见时触发的事件
我可以尝试下一步来获得这项工作。
我需要更多的信息,请说出来,我会找到它。
在调用创建表单的函数之前,我在mainform中设置了沙漏,然后我的表单显示如下。
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个不同的表格。
您是以模态显示表格吗?在这种情况下,crHourGlass
设置通过致电ShowModal
而被取消,其中呼叫Screen.Cursor := crDefault;
被创建。见Vcl.Forms
单位,function TCustomForm.ShowModal: Integer;
行7139(XE7来源)。
治愈的方法是在所有那些SetupXXX调用和Screen.Cursor := crDefault;
之后调用Screen.Cursor := crHourGlass;
的TfrmJsCv.FormShow()
。
现在OP确认窗体是以模态显示的,我认为更多的解释可能对未来的读者有益。
OP说:
“之前的形式是可见的沙漏已经一去不复返了。”
“我设置我的MainForm沙漏调用创建 形式函数之前......”
因此他在主要形式是这样的:
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;
的目的显然是为了让模态形式操纵光标根据需要,然后恢复立方米rsor到拨打ShowModal
之前的内容。这至少与Delphi 7相同。
请注意,普通的Show
不会做上面的excersize。
在调用ShowModal之前设置crHourGlass
以及之后不设置crDefault
的另一个影响是游标在显示表单时仍然不会显示为沙漏形状,而是紧随其后。这可能是这样的解释:)
我们正在讨论应用程序的主要形式。 AFAIK在问题 –
的背景下没有ShowModal @Sir我们正在讨论他从主表单中打开的辅助表单。诚然,他没有提到任何有关莫代尔的话,这就是我问的原因。它解释了症状,所以我相当有信心(除非另有说明)。 –
如您怀疑的那样,表单会以模态显示 - 这就是问题所在。我将呼叫转移到了沙漏到OnShow,现在它显示正确。谢谢 – OZ8HP
“我试过所有事件”:告诉我们! – NGLN
“向我们展示” - 这并不容易。但OnActivate,OnCreate,OnShow,OnResize,OnPaint已经尝试过,没有运气。 – OZ8HP
那么当您尝试在OnShow中重置光标时出了什么问题? –