gpt4 book ai didi

delphi - 对 TEdit 中的选定文本使用 Styled SysColor

转载 作者:行者123 更新时间:2023-12-01 19:45:43 25 4
gpt4 key购买 nike

我正在使用 Delphi XE3 构建 VCL 应用程序。该 VCL 应用程序使用 Vcl.Styles 单元中的内置样式进行样式设置。

在我使用的SysColor样式中,clHighlight已被更改,但是当在TEdit(或TComboBox)中选择一段文本时或TMemo)使用默认的系统突出显示颜色(默认为蓝色)为所选文本的背景着色。

注意:其他控件使用 SysColor clHighlight 从样式中选择项目。

问题:如何在样式中指定这种颜色?

最佳答案

这是WinApi的限制,这些控件使用的突出显示颜色不能直接修改。唯一的解决方法是 Hook 并替换 GetSysColor方法 StyleServices.GetSystemColor功能。就像这样

implementation

uses
DDetours,
WinApi.Windows,
Vcl.Styles,
Vcl.Themes;

var
TrampolineGetSysColor: function (nIndex: Integer): DWORD; stdcall;
GetSysColorOrgPointer : Pointer = nil;

function InterceptGetSysColor(nIndex: Integer): DWORD; stdcall;
begin
if StyleServices.IsSystemStyle then
Result:= TrampolineGetSysColor(nIndex)
else
Result:= StyleServices.GetSystemColor(nIndex or Integer($FF000000));
end;

initialization
if StyleServices.Available then
begin
GetSysColorOrgPointer := GetProcAddress(GetModuleHandle('user32.dll'), 'GetSysColor');
@TrampolineGetSysColor := InterceptCreate(GetSysColorOrgPointer, @InterceptGetSysColor);
end;
finalization
if GetSysColorOrgPointer<>nil then
InterceptRemove(@TrampolineGetSysColor);

end.

之前

enter image description here

之后

enter image description here

顺便说一下VCL Styles Utils项目包括一个带有此钩子(Hook)的单元。

关于delphi - 对 TEdit 中的选定文本使用 Styled SysColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24140270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com