- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以使用 VCL 样式为 TOpenDialog 和 TOpenPictureDialog 换肤?
最佳答案
简短的回答是“否”,当前使用 Delphi XE2 或 XE3 不可能将 Vcl 样式直接应用于非 VCL 表单(或在 VCL 应用程序外部创建的表单)。
现在的答案很长,从技术上讲,将 Vcl 样式应用于此类对话框是可能的,但这需要大量的工作(相信我,这需要大量的工作)。
关键是使用 WH_CBT Hook,检测HCBT_CREATEWND
代码,然后检查窗口的类是否为 #32770
(对话框的类。)从这里您可以使用 SetWindowLong
替换窗口过程具有 GWL_WNDPROC
索引的函数。
这是简单的部分,现在您可以控制窗口对话框发送的消息您必须迭代子控件并使用以下命令再次替换窗口过程GWL_WNDPROC 索引。这可以通过为 Windows 对话框中使用的每个控件(按钮、syslistview32、组合框等)创建包装类(这是一项艰苦的工作)来完成
这是 syslistview32
windows 类的包装器类的定义示例。
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;
最后,您可以使用为 Vcl 控件(如 TListView)定义的现有 VCL 样式钩子(Hook)
TStyleManager.Engine.RegisterStyleHook(TListViewWnd, TListViewStyleHook);
我已经完成了上述部分任务,但尚未完成,因此此类项目需要大量时间。
关于delphi - 使用 VCL 样式对 TOpenDialog 和 TOpenPictureDialog 进行换肤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13719764/
我在 Lazarus 上有一个项目,我想使用 gcc 编译源代码,为此我有一个名为 OpenDialog1 的 TOpenDialog 和一个 TProcess > 称为AProcess。 我使用以下
我有一个 Delphi 应用程序,它使用 TOpenDialog 让用户选择文件。默认情况下,打开的对话框显示在当前监视器的中心,而当前监视器可能距离应用程序窗口“数英里”。我希望对话框以 TOpen
如何在打开和保存对话框中强制 zip 存档显示为文件而不是文件夹? 通过显示为文件夹,我的意思是这样的: 最佳答案 Vista 及更高版本上的 Windows 文件打开对话框支持 IFileDialo
TOpenDialog 有一个选项ofEnableSizing,允许用户修改打开对话框的对话框大小。该尺寸数据似乎是为应用程序存储的。如果程序再次启动,对话框将以相同的大小打开。 我的问题是,这些数据
我在 Delphi XE7 中使用了 TOpenDialog 组件,因为我想选择一个或多个文件。但是,在我选择它们并单击“确定”后,所选文件已按字母顺序(从 A 到 Z)存储在 中。文件 属性(pro
我真的很想知道使用 TOpenDialog 选择目录的各种方法,无论是下载新组件还是使用 Delphi 提供的内容,但最好使用 Delphi 提供的内容。 在此之前,我一直在使用 SelectDire
在 W7 x64 中使用 Delphi Seattle。当使用自定义 VCL 样式并且选择大量文件(例如 2-3k+)时,文件名会损坏。如果没有自定义样式,这种情况就不会发生。 program Pro
我有一个非常简单的表单,上面有一个 TOpenDialog 和一个按钮。当我按下按钮时,它会在对话框中调用 Execute。如果我在调试器中观察,打开对话框的行为会产生 14 个线程,当我关闭对话框时
给定以下测试形式(在 Delphi 10.1 和 Delphi 2007 中测试): object Form1: TForm1 Caption = 'Form1' ClientHeight =
我在 Windows 10 上使用 Delphi Berlin。我需要在基于 tStringGrid 的 tForm 上使用 tOpenDialog。 当我双击与打开的对话框上的固定列或行重叠的文件时
请参阅以下步骤进行重现。在 XE2 中运行良好,但在 XE8 中运行不佳。 创建新的 VCL 表单应用程序 - Delphi 在表单上放置一个 TButton 和 TOpenDialog 在按钮OnC
用户应仅打开“KLADR.DBF”文件。我将“Filter”属性设置为“kladr.dbf”,对话框仅显示所需的文件,但在同一目录中还有另一个“.DBF”文件(STREET.DBF),用户可以通过在“
将我的问题提到这个答案:https://stackoverflow.com/a/4016075/698266 ,特别是第 3 步说“否则,如果应用程序过去使用过打开或另存为对话框,则选择最近使用的路径
我有一个 TOpenDialog我在运行时创建的组件,我想禁用在使用文件时弹出的提示。除了创建对象、执行对象并提取文件名,然后释放实例之外,我还没有为此编写任何 exrta 代码。 我可以做我想做的事
我有一个使用以下内容创建的模式对话框: procedure TFormCompose.createParams(var Params: TCreateParams); begin inher
Firemonkey 应用程序中的 TOpenDialog 似乎存在问题,该应用程序已针对 Mac Appstore 进行沙箱处理。我使用XE3,但它也存在于XE2中。我其实在这里找到了一份QC报告,
新版 TFileOpenDialog 和旧版 TOpenDialog 有什么区别? 在我的计算机(Win 7/DXE)中,当我运行代码时,对话框看起来是一样的。 最佳答案 TOpenDialog 在满
我有一个调用 TOpenDialog 的表单。当窗口出现时,我右键单击显示的文件之一,然后单击属性。关闭 Windows 属性窗口后,打开的对话框窗口会落到调用窗体和主应用程序后面的 Z 顺序底部。使
在我的 Delphi 应用程序中,当我执行 TOpenDialog 时,它会在显示对话框之前加载很多模块。 这可能需要一段时间。(2-3 秒)。 第二次和其他时候,它要快得多。 有没有办法在启动应用程
总结: 请参阅下面来自 Craig 和 Sertac 的有用评论。 ================================================== ======= 如下面的最小化
我是一名优秀的程序员,十分优秀!