Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RichEdit v2+ [D7, WinXP]


Yuri Btr ©   (2006-04-07 17:44:00) 

Добрый день, подскажите кто может:
я пытаюсь в своей программе использовать RichEdit, но так как компонент TRichEdit с закладки Win32 использует библиотеку первой версии (а мне нужно более поздние), я создаю динамически окно:
  hRichEditLib:=LoadLibraryEx(PChar(RichEditModuleName),0,0);

hRichEdit:=CreateWindow(PChar(RichEditClassName),
                        PChar('RE1'),
                        WS_CHILD or WS_VISIBLE or WS_BORDER or ES_MULTILINE or WS_VSCROLL or ES_NOHIDESEL or ES_DISABLENOSCROLL,
                        0,
                        P1.Height,
                        Self.ClientWidth,
                        Self.ClientHeight,
                        Self.Handle,
                        0,
                        0,
                        nil);


Причём
RichEditModuleName='MSFTEDIT.DLL'
RichEditClassName='RICHEDIT_CLASS' согласно MSDN,
но библиотека загружается, а окно не создаётся - GetLastError возвращает 1407 - "Class not found"
Почему бы это ?


Fay   (2006-04-08 04:03:00) [1]

#define MSFTEDIT_CLASS  L"RICHEDIT50W"
// NOTE:  MSFTEDIT.DLL only registers MSFTEDIT_CLASS.  If an application wants
// to use the following Richedit classes, it needs to load the riched20.dll.
// Otherwise, CreateWindow with RICHEDIT_CLASS would fail.
// This also applies to any dialog that uses RICHEDIT_CLASS,

// RichEdit 2.0 Window Class
// On Windows CE, avoid possible conflicts on Win95
#define CERICHEDIT_CLASSA "RichEditCEA"
#define CERICHEDIT_CLASSW L"RichEditCEW"

#define RICHEDIT_CLASSA  "RichEdit20A"
#define RICHEDIT_CLASS10A "RICHEDIT"   // Richedit 1.0

#ifndef MACPORT
#define RICHEDIT_CLASSW  L"RichEdit20W"
#else //----------------------MACPORT
#define RICHEDIT_CLASSW  TEXT("RichEdit20W") // MACPORT change
#endif // MACPORT  

#if (_RICHEDIT_VER >= 0x0200 )
#ifdef UNICODE
#define RICHEDIT_CLASS  RICHEDIT_CLASSW
#else
#define RICHEDIT_CLASS  RICHEDIT_CLASSA
#endif // UNICODE
#else
#define RICHEDIT_CLASS  RICHEDIT_CLASS10A
#endif // _RICHEDIT_VER >= 0x0200


Yuri Btr   (2006-04-07 22:10:00) [2]

to Fay ©   (07.04.06 19:18) [6]
Дело в том, что я не уверен, что можно через наследника TRichEdit перекрыть CreateParams у его предка TCustomRichEdit, я задал этот вопрос здесь -   http://www.delphimaster.ru/cgi-bin/forum.pl?id=1144420112&n=12, но уважаемый мною MBo пока не ответил

Если вы знаете как это сделать, прошу вас написать
Но всё равно вопрос ветки останется открытым, почему класс RICHEDIT_CLASS не доступен ???


Fay   (2006-04-07 19:18:00) [3]

2 Yuri Btr ©   (07.04.06 18:03) [2]
> там надо перерыть весь код
Почему это весь?


Yuri Btr   (2006-04-07 18:36:00) [4]

to Eraser ©   (07.04.06 18:34) [4]
Погляжу, ОК


Eraser   (2006-04-07 18:34:00) [5]


> Yuri Btr ©   (07.04.06 18:13) [3]

см. TjvRichEdit из JEDI VCL


Yuri Btr   (2006-04-07 18:13:00) [6]

Тем более что перекрывать надо по идее TCustomRichEdit.CreateParams, т.е. писать наследника TCustomRichEdit - фактически создавая дубликат TRichEdit'у


Yuri Btr   (2006-04-07 18:03:00) [7]

to Fay ©   (07.04.06 17:58) [1]
В смысле у TRichEdit перекрыть ???, то там надо перерыть весь код, я уже смотрел ...


Fay   (2006-04-07 17:58:00) [8]

А перекрыть CreateParams не помогает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо