在 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 通常包含的功能)。
VCL 使用子类窗口类,因此您不能以这种方式使用
GetClassName()
。 它总是会返回 TRichEdit
,这与您的测试用例不匹配。
RealGetWindowClass()
来代替。
参见:
RealGetWindowClass 和 GetClassName 有什么区别? (或者什么是“窗口类型”与“窗口类名称”?)