2015-05-09 78 views
0

我有一个需要一些时间来创建的窗体,我想向用户显示发生了某些事情,并且当我调用显示该窗体的函数时我做了一个沙漏光标形成。但我的问题是,我不能让屏幕上实际显示窗体时首先执行第一个执行的代码。 我尝试了所有的事情,使有点感觉尝试,但没有运气。表单可见之前沙漏已经消失。当窗体在屏幕上可见时触发的事件

我可以尝试下一步来获得这项工作。

我需要更多的信息,请说出来,我会找到它。

在调用创建表单的函数之前,我在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个不同的表格。

+0

“我试过所有事件”:告诉我们! – NGLN

+0

“向我们展示” - 这并不容易。但OnActivate,OnCreate,OnShow,OnResize,OnPaint已经尝试过,没有运气。 – OZ8HP

+0

那么当您尝试在OnShow中重置光标时出了什么问题? –

回答

6

您是以模态显示表格吗?在这种情况下,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的另一个影响是游标在显示表单时仍然不会显示为沙漏形状,而是紧随其后。这可能是这样的解释:)

+0

我们正在讨论应用程序的主要形式。 AFAIK在问题 –

+0

的背景下没有ShowModal @Sir我们正在讨论他从主表单中打开的辅助表单。诚然,他没有提到任何有关莫代尔的话,这就是我问的原因。它解释了症状,所以我相当有信心(除非另有说明)。 –

+0

如您怀疑的那样,表单会以模态显示 - 这就是问题所在。我将呼叫转移到了沙漏到OnShow,现在它显示正确。谢谢 – OZ8HP

相关问题