在 Delphi 12 Athens 中强制使用 RichEdit 4.1?

问题描述 投票:0回答:1

在 Windows 11 中的 Delphi 12.1 中检查现有

TRichEdit
实例的 RichEdit 版本时,我总是得到版本 2.0(应该是版本 4.1 或更高版本):

function GetRichEditVersion(RichEditHandle: HWND): string;
var
  ClassName: array[0..255] of Char;
begin
  if GetClassName(RichEditHandle, ClassName, Length(ClassName)) > 0 then
  begin
    if StrPos(ClassName, 'RICHEDIT50W') <> nil then
      Result := 'RichEdit 4.1'
    else if StrPos(ClassName, 'RichEdit20W') <> nil then
      Result := 'RichEdit 3.0'
    else if StrPos(ClassName, 'RichEdit') <> nil then
      Result := 'RichEdit 2.0'
    else
      Result := 'RichEdit 1.0 or older';
  end
  else
    Result := 'Unable to determine RichEdit version';
end;

这是 RichEdit 历史记录:

• RichEdit 1.0:第一个版本,非常基础,仅支持 ANSI 文本。
• RichEdit 2.0:随 Windows 95 引入,支持 Unicode。
• RichEdit 3.0:在Windows 2000/XP 中引入,添加了更多功能,例如更好的字体处理。
• RichEdit 4.0 及更高版本:RichEdit 4.1 包含在 Windows Vista 及更高版本中,具有缩放支持等高级功能(这是现代 Delphi 版本中的 TRichEdit 通常包含的功能)。

delphi richedit delphi-12-athens trichedit
1个回答
0
投票

VCL 使用子类窗口类,因此您不能以这种方式使用

GetClassName()
。 它总是会返回
TRichEdit
,这与您的测试用例不匹配。

您需要使用

RealGetWindowClass()
来代替。

参见:

RealGetWindowClass 和 GetClassName 有什么区别? (或者什么是“窗口类型”与“窗口类名称”?)

是什么让 RealGetWindowClass 比 GetClassName 更真实?

© www.soinside.com 2019 - 2024. All rights reserved.