Вы можете использовать
function GetClassInfo(hInstance: HINST; lpClassName: PChar; var lpWndClass: TWndClass): BOOL;
Я думаю, что это то, что пытался сделать Реми.
что-то вроде:
Function IsRichEdit(MyControl : TWinControl):Boolean;
var
Info : TWNDClass;
begin
Result := False;
if GetClassInfo(HInstance,PCHAR('RICHEDIT'),Info) and (Info.lpfnWndProc = MyControl.DefWndProc) then
Result := True
else if GetClassInfo(HInstance,PCHAR('RICHEDIT20A'),Info) and (Info.lpfnWndProc = MyControl.DefWndProc) then
Result := True
else if GetClassInfo(HInstance,PCHAR('RICHEDIT30A'),Info) and (Info.lpfnWndProc = MyControl.DefWndProc) then
Result := True
else if GetClassInfo(HInstance,PCHAR('RICHEDIT41A'),Info) and (Info.lpfnWndProc = MyControl.DefWndProc) then
Result := True
else if GetClassInfo(HInstance,PCHAR('RICHEDIT50A'),Info) and (Info.lpfnWndProc = MyControl.DefWndProc) then
Result := True
end;
Если вы используете Delphi> 2007, то вам, возможно, придется проверить на 'W' (Unicode) версии, а также, например, 'RICHEDIT20W'
Edit: добавлен тест Info.WndProc для соответствия элементу управления.
Как ни странно, это не сработает для cxControls, поскольку cxRichEdit не является элементом управления, используя богатое окно редактирования (оно содержит, поэтому вам нужно будет передать cxControl.InnerControl для этого, чтобы вернуть true).
Редактировать Я не мог заставить это работать больше, чем первый созданный элемент управления richedit.
Это расширенные элементы управления Delphi VCL. Существуют TcxRichEdit, TRxRichEdit и т. Д. ... –
Это работает только для элементов управления, которые получены из T (Custom) RichEdit. Он не будет работать для элементов управления, которые производятся от TWinControl или TCustomControl. –
Да, но в вашем вопросе вы сказали: «Для Delphi существует довольно много элементов управления редактирования, включая элементы управления от сторонних поставщиков. Все эти элементы управления являются подклассом RichEdit». Если они являются подклассом TRichEdit, то работает тест 'is'. –