monsoon

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нужно сделать, чтобы срабатывала гиперссылка в RichEdit. Если RichEdit располагается сразу на форме, код такой: Код: // Unit1.cpp __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { unsigned mask = SendMessage(RichEdit1->Handle, EM_GETEVENTMASK, 0, 0); SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, mask | ENM_LINK); SendMessage(RichEdit1->Handle, EM_AUTOURLDETECT, true, 0); RichEdit1->Text = "Компьютерный форум Ru.Board (http://forum.ru-board.com)"; void __fastcall TForm1::WndProc(Messages::TMessage &Message) { if (Message.Msg == WM_NOTIFY) { if (((LPNMHDR)Message.LParam)->code == EN_LINK) { ENLINK* p = (ENLINK *)Message.LParam; if (p->msg == WM_LBUTTONDOWN) { SendMessage(RichEdit1->Handle, EM_EXSETSEL, 0, (LPARAM)&(p->chrg)); ShellExecute(Handle, "open", RichEdit1->SelText.c_str(),0, 0, SW_SHOWNORMAL); } } } TForm::WndProc(Message); } // Unit1.h void __fastcall TForm1::WndProc(Messages::TMessage &Message); | Решено: Для того, чтобы гиперссылки работали когда RichEdit расположен на панели или PageControl-е и т.п. нужно переопределить обработчик сообщений для компонента выше по уровню. Например для PageControl переопределить WindowProc для TabSheet: FTabSheetWndProc = TabSheet1->WindowProc; TabSheet1->WindowProc = TabSheet_WndProc; А в ф-ию TabSheet_WndProc(TMessage &Message) пишем все, что относилось к TForm1::WndProc выше в примере | Всего записей: 1255 | Зарегистр. 30-01-2003 | Отправлено: 01:17 07-11-2010 | Исправлено: monsoon, 21:03 07-11-2010 |
|