2012-05-04 17 views
4

Delphi TTaskDialog可以使用VCLStyles嗎?Delphi TTaskDialog可以使用VCLStyles嗎?

+5

['TTaskDialog'](http://docwiki.embarcadero.com/Libraries/en/Vcl.Dialogs.TTaskDialog)完全是['Windows Vista up dialog'](http://msdn.microsoft.com /en-us/library/windows/desktop/bb787471%28v=vs.85%29.aspx),恐怕這很難做到(如果甚至可能的話)。我的建議是創建你自己的(而且,你會得到好處,你自己的任務對話框也可以在Windows XP下工作)。 – TLama

+0

['Arnaud'](http://stackoverflow.com/users/458259/arnaud-bouchez)做了一個['任務對話框模擬](http://blog.synopse.info/post/2011/03/05/Open-Source-SynTaskDialog-unit-for-XP,Vista,Seven)適用於Windows XP及更低版本。 – TLama

+1

Tlama/Arnaud - 我再次驚訝於StackOverflow社區的知識和樂於助人! – Mmarquee

回答

4

AFAIK,並且如TLama在他的評論中所述,這個TTaskDialog只是直接映射Windows API,您將無法直接執行VCL Style。

但是你也許可以通過使用類似於described in this article about using VCL Styles within a TWebBrowser的黑客來做到這一點。

這將是一些工作,或者甚至不可行,我懷疑。你必須破解由Windows創建的所有組件,這並不容易。 Task Dialog API沒有提供完整和詳細的COM接口,有很多回調,可以被重寫,就像TWebBrowser一樣。

如果您使用我們的Open-Source Task Dialog emulation code作爲開始,您可以強制使用我們的仿真層和純VCL組件。在這種情況下,使用樣式很容易。不要忘了給我們發送反饋和補丁,以便讓單位得到改進!其他用戶希望爲這樣一個不錯的功能帶來好處,我想。這對開放源代碼來說非常重要:你開始創建,發佈,然後contributions are integrated,結果變得更好。 :)

+0

+ 1ed,我不想竊取學分:-)無論如何,我發現一個奇怪的問題與定位。設置「Form.Canvas.TextWidth」將位置更改爲較高的負值,同樣,隨後對錶單大小的每次更改也會減少位置值,因此表單永遠不可見。我不明白爲什麼會發生這種情況,因爲這不應該影響形式位置恕我直言。 – TLama

+0

@TLama你是什麼意思「設置Form.Canvas.TextWidth」? –

+0

'SynTaskDialog.pas',第653行。我已經在我刪除的帖子中調用了Execute,並在該行上將Form.Left和Form.Top改爲了負值(非常奇怪)。順便說一句。我用「poScreenCenter」位置設置了調用者表單(這取決於某種原因,不明白爲什麼)。 – TLama

6

我剛剛添加TTaskDialog支持VCL Styles Utils庫。

enter image description here

enter image description here

要激活這個功能,你需要將這些設備添加到您的項目。

  • Vcl.Styles.Utils.Forms
  • Vcl.Styles.Utils.SysStyleHook
  • Vcl.Styles.Utils.SysControls
  • Vcl.Styles.Hooks

更多信息,可以被發現在這blog post

相關問題