使用VCL syles可以蒙皮TOpenDialog和TOpenPictureDialog嗎?使用VCL樣式蒙皮的TOpenDialog和TOpenPictureDialog
3
A
回答
5
簡短的回答是否,目前使用Delphi XE2或XE3不可能直接將Vcl樣式應用於非VCL樣式(或創建於VCL應用程序之外的樣式)。
現在很長的答案,技術上可行的VCL樣式適用於這些類型的對話框,但這需要很多工作(相信我是很多工作)。
使用WH_CBT鉤,檢測HCBT_CREATEWND
代碼,然後檢查是否類窗口的是#32770
(類爲一個對話框)。從這裏可以使用SetWindowLong
函數替換窗口過程關鍵與GWL_WNDPROC
索引。
這是比較容易的部分,現在,你有你必須遍歷子控件,並再次使用 GWL_WNDPROC指數更換窗口過程由Windows對話框 發送的消息的控制。這可以在Windows對話框(按鈕,syslistview32,Combobox等)中使用的每個控件創建Wrapper類(這是一項艱苦的工作)
這是一個用於syslistview32
windows類的Wrapper類定義的示例。
TListViewWnd = class(TCustomListView)
private
FNewWndProc : Pointer;
FOrgWndProc : Pointer;
Fhwnd: THandle;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure WndProc(var Message: TMessage); override;
public
constructor Create(hwnd: THandle);
destructor Destroy;override;
end;
最後,你可以在這條路上
TStyleManager.Engine.RegisterStyleHook(TListViewWnd, TListViewStyleHook);
我以前已經完成上述任務的一部分使用現有的VCL樣式爲VCL的的鉤定義的控制,如TListView的,但不尚未完成,因此這類項目需要大量時間。
4
對於任何有興趣的VCL Styles Utils Project
現在支持對話
您可以找到有關this blog post該功能的詳細信息。
相關問題
- 1. 德爾福:TOpenDialog + VCL樣式文件大量損壞文件
- 2. 使用Vcl的樣式時
- 3. TSaveTextFileDialog和Vcl的樣式
- 4. 當vcl樣式被激活時,我可以如何爲我的應用程序的消息框蒙皮?
- 5. 使用VCL樣式時覆寫某些TBitButton的樣式
- 6. SmartGWT蒙皮
- 7. NodeJS蒙皮
- 8. Collada蒙皮
- 9. 可重複使用的蒙皮代碼?
- 10. 德爾福TStatusBar SizeGrip和VCL樣式
- 11. DevExpress ExpressSkins或VCL樣式?
- 12. 蒙皮MFC應用程序
- 13. 使用Degrafa蒙皮HorizontalList滾動條
- 14. Flex 4蒙皮「庫」
- 15. TOpenDialog和Spaces
- 16. 用VCL樣式形成背景顏色?
- 17. 如何將vcl樣式應用於TPopupmenu?
- 18. 如何在VCL皮膚編輯器上使用皮膚編輯器(devexpress)
- 19. 嵌入在DLL中的VCL樣式?
- 20. 定製油漆方法不使用Vcl的樣式顏色
- 21. UINavigationBar後退按鈕蒙皮
- 22. 德爾福XE2 VCL樣式,刪除樣式或從的TLabel
- 23. Flex定製樣式(皮膚)
- 24. 不能覆蓋使用脆皮形式的複選框樣式
- 25. VCL樣式菜單熱鍵不一致
- 26. 用ITCSS,BEM和OOCSS分離結構和蒙皮
- 27. 組合框不使用vcl樣式高亮顏色。
- 28. 從Delphi XE7到Delphi XE2使用VCL樣式
- 29. 使用VCL樣式時TListview標題中無圖像
- 30. 使用VCL樣式獲取TStylemanager找不到
看起來不錯! (除了自己製作的細節:-) [+1] – TLama
我猜UseLatestCommonDialogs = False是必需的嗎? –
@SertacAkyuz,是的,因爲沒有辦法破解無證的'DirectUIHWND' :( – RRUZ