Проблема с текстовым редактором

Тема в разделе "WASM.BEGINNERS", создана пользователем DuXeN0N, 9 июн 2009.

  1. DuXeN0N

    DuXeN0N New Member

    Публикаций:
    0
    Регистрация:
    2 май 2009
    Сообщения:
    46
    Делаю текстовый редактор. Возникла небольшая проблема. Нужно сделать функцию перенос по словам. Я создаю EDIT функцией CreateWindowEx с флагами WS_VISIBLE+WS_CHILD+ES_MULTILINE+WS_HSCROLL+WS_VSCROLL+ES_AUTOHSCROLL+ES_AUTOVSCROLL. чтобы был перенос по словам нужно нужно создать эдит только убрать флаги: ES_AUTOHSCROLL и WS_HSCROLL. вопрос: как можно пересоздать эдит в программе при ее выполнении?
     
  2. DuXeN0N

    DuXeN0N New Member

    Публикаций:
    0
    Регистрация:
    2 май 2009
    Сообщения:
    46
    ах да. совсем забыл. пишу на FASM
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    fasm.moy.su
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    я в своей программе пересоздаю его:
    Код (Text):
    1. ;=======================================================================
    2. proc ChangeEdit _hedit,_flags
    3. ;-----------------------------------------------------------------------
    4.     local modify: dd ?
    5. ;-----------------------------------------------------------------------
    6.     invoke SendMessage,[_hedit],EM_GETMODIFY,0,0
    7.     mov [modify],eax
    8.     invoke SendMessage,[_hedit],EM_GETHANDLE,0,0
    9.     push eax
    10.     invoke LocalAlloc,LMEM_MOVEABLE,16
    11.     push 0      ; для EM_SETHANDLE
    12.     push eax
    13.     invoke LocalLock,eax
    14.     mov dword [eax],0
    15.     invoke LocalUnlock,eax
    16.     invoke SendMessage,[_hedit],EM_SETHANDLE
    17.     invoke DestroyWindow,[_hedit]
    18.     invoke CreateWindowEx,WS_EX_CLIENTEDGE,_edit,0,[_flags],0,0,0,0,\
    19.                           [hMain],IDW_EDIT,[wc.hInstance],NULL
    20.     mov [_hedit],eax    
    21.     invoke SendMessage,eax,EM_GETHANDLE,0,0
    22.     pop  edx
    23.     push eax
    24.     invoke SendMessage,[_hedit],EM_SETHANDLE,edx,0
    25.     invoke SendMessage,[_hedit],EM_SETTABSTOPS,1,tab_stops
    26.     invoke SendMessage,[_hedit],EM_SETMODIFY,[modify],0
    27.     invoke LocalFree
    28.     mov eax,[_hedit]
    29.     ret
    30. ;-----------------------------------------------------------------------
    31. endp
    32. ;=======================================================================
    для полного счастья здесь еще бы не помешало сохранять/восстанавливать текущую позицию - здесь это не делается.
    _hedit - старый хэндл
    _flags - флаги (стили)
    возвращает новый хэндл.
    для уменьшения затрат на копирование текст переносится в новый контрол передачей области памяти, принадлежавшей первому контролу.
     
  5. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    По-моему, можно послать сообщение, изменяющее стили элемента управления. Только вот не помню его - загляните в winuser.h.
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    можно, но бесполезно: стили изменятся, поведение - нет (проверено)
     
  7. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    shoo
    А перерисовать элемент - не поможет? Может еще какое событие надо послать, чтобы применить новые стили (может WM_INITDIALOG?).
     
  8. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    ну, мне этого сделать не удалось ;)