нужно отследить клик по ссылке в RichEdit вот исходный Код (Text): void __fastcall TMainForm::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); } вот я попытался чуть подобное сделать но дальше неполучается Код (Text): .if uMsg==WM_NOTIFY mov eax,lParam .if [eax].NMHDR.code==EN_LINK .endif .endif
нашёл код на дельфи каторый смог скомпильть вот проверку есчё надо делать, но если кто знает какая там структура то былоб лучше) CMP DWORD PTR [EAX+0CH],WM_LBUTTONDOWN JNZ exit но вот как они указатель на строку получают чтоб запустить url по нажатию его в тексте?
Вот она. Посылают сообщение EM_EXSETSEL окну RichEdit. Сообщение посылают через SendMessage, как обычно. Вместе с сообщением передают указатель на буфер для строки с url.
непойму нечего, в отладчике работает без него валится нечего непойму .if uMsg==WM_NOTIFY mov eax,lParam .if [eax].NMHDR.code==EN_LINK .if DWORD PTR [EAX+0CH]==WM_LBUTTONDOWN lea ecx,[EAX+0CH+01ch] invoke SendMessage,HWND_IDC_RED1,EM_EXSETSEL,0,ecx invoke SendMessage,HWND_IDC_RED1,0000043Eh,0,offset buffer invoke ShellExecute, NULL, offset szOpen, offset buffer, NULL, NULL, SW_SHOWNORMAL .endif .endif .endif exit: mov eax,FALSE ret
readme Во-первых почему линк извлекается 2 раза? Одного раза достаточно. Я бы оставил второй, т.е. этот: Код (Text): invoke SendMessage,HWND_IDC_RED1,0000043Eh,0,offset buffer Во-вторых размер buffer достаточно велик, чтобы вместить url?
buffer db 600 dup (?) так invoke SendMessage,HWND_IDC_RED1,EM_EXSETSEL,0,ecx выделяет ссылку а invoke SendMessage,HWND_IDC_RED1,0000043Eh,0,offset buffer копирует в буфер
я сам чтото непонимаю стал делать тестовую прогу такой же обработчик сделал-работает беру свой проект копирую в другую папку-работает вобщем нечего непонимаю вобщем он то работает то нет немогу понять
Как говорил один мой наставник, "если прога то работает, то не работает, значит она не работает" и сразу ставил нолик.
Quantum понял вобщем когда я тебе делал пробник то у него заданые мной настройки при компили терялись щас сделаю потом приатачу если это так вобщем в исхходных настройках есть /HEAP:2710 если его потом убрать то работает ------------ нет неизза этого,буду разбирать