borland c->asm

Тема в разделе "WASM.BEGINNERS", создана пользователем readme, 23 апр 2006.

  1. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    нужно отследить клик по ссылке в RichEdit

    вот исходный
    Код (Text):
    1. void __fastcall TMainForm::WndProc(Messages::TMessage &Message)
    2.  {
    3.   if(Message.Msg == WM_NOTIFY)
    4.    {
    5.     if(((LPNMHDR)Message.LParam)->code == EN_LINK)
    6.       {
    7.         ENLINK* p = (ENLINK *)Message.LParam;
    8.         if(p->msg == WM_LBUTTONDOWN)
    9.          {
    10.           SendMessage(RichEdit1->Handle,
    11.           EM_EXSETSEL, 0, (LPARAM)&(p->chrg));
    12.           ShellExecute(Handle, "open", RichEdit1->SelText.c_str(), 0, 0, SW_SHOWNORMAL);
    13.          }
    14.       }
    15.    }
    16.      
    17.   TForm::WndProc(Message);
    18.  }
    19.  


    вот я попытался чуть подобное сделать но дальше неполучается
    Код (Text):
    1.  
    2. .if uMsg==WM_NOTIFY
    3.     mov eax,lParam
    4.     .if [eax].NMHDR.code==EN_LINK
    5.  
    6.     .endif
    7. .endif
    8.  
     
  2. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    нашёл код на дельфи каторый смог скомпильть вот

    проверку есчё надо делать, но если кто знает какая там структура то былоб лучше)

    CMP DWORD PTR [EAX+0CH],WM_LBUTTONDOWN

    JNZ exit

    но вот как они указатель на строку получают чтоб запустить url по нажатию его в тексте?
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Вот она.





    Посылают сообщение EM_EXSETSEL окну RichEdit. Сообщение посылают через SendMessage, как обычно. Вместе с сообщением передают указатель на буфер для строки с url.
     
  4. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    Quantum

    спасибо всё понял
     
  5. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    непойму нечего, в отладчике работает без него валится

    нечего непойму

    .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
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    readme



    Во-первых почему линк извлекается 2 раза? Одного раза достаточно. Я бы оставил второй, т.е. этот:
    Код (Text):
    1. invoke SendMessage,HWND_IDC_RED1,0000043Eh,0,offset buffer


    Во-вторых размер buffer достаточно велик, чтобы вместить url?
     
  7. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    buffer db 600 dup (?)

    так invoke SendMessage,HWND_IDC_RED1,EM_EXSETSEL,0,ecx

    выделяет ссылку

    а invoke SendMessage,HWND_IDC_RED1,0000043Eh,0,offset buffer

    копирует в буфер
     
  8. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    последняя ошибка после ShellExecute

    ERROR_SUCCESS (00000000)

    хм чтото нетак там очевидно
     
  9. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    последняя ошибка после ShellExecute

    ERROR_SUCCESS (00000000)

    хм чтото нетак там очевидно
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    readme

    Да, что-то я запутался. Приаттачте лучше сюда тестовый экзешник (исходник не нужен).
     
  11. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    я сам чтото непонимаю стал делать тестовую прогу такой же обработчик сделал-работает

    беру свой проект копирую в другую папку-работает

    вобщем нечего непонимаю

    вобщем он то работает то нет немогу понять
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Как говорил один мой наставник, "если прога то работает, то не работает, значит она не работает" и сразу ставил нолик.
     
  13. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    Quantum

    понял

    вобщем когда я тебе делал пробник то у него заданые мной настройки при компили терялись щас сделаю потом приатачу если это так

    вобщем в исхходных настройках есть /HEAP:2710

    если его потом убрать то работает

    ------------

    нет неизза этого,буду разбирать
     
  14. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    всем спасибо флаги изменил в риче стало всё нормально