2015-05-09 76 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

相關問題