помогите с Edit Text в RadAsm

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

  1. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    проблема такая пытаюсь Edit Text послать Send Message

    обычно (в блокноте))) делал примерно так:
    invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassEdit,NULL,WS_CHILD or WS_VISIBLE,10,10,370,23,hWin,1321,hInstance,NULL
    mov hEdit,eax
    invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR OurText

    а по скольку в RadAsm есть редактор ресурсов хотел сам Edit Text построить там, а Send Message уже собственно из самой программы, но низнаю как мне получить hEdit ?
     
  2. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    через GetDlgItem

    можешь для этого использовать макрос
    GetDlgItm Macro hdlg,idctrl,hctrl
    invoke GetDlgItem,hdlg,idctrl
    IfNB <hctrl>
    mov hctrl,eax
    EndIf
    EndM

    использование:
    GetDlgItm hWnd,IDC_EDIT1,hEdit
     
  3. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    Спасибо большое!! совет мне помог!!!
     
  4. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    у меня по ходу еще одни вопрос возник, а как сделать чтобы в EditText при редактировании переход на другую строку был при нажатии на Enter а не Ctrl+Enter
    вообще то странно раньше помоему всегда на Enter переходило
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Создавай EDIT со стилями ES_WANTRETURN и ES_MULTILINE
     
  6. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    Спасибо!!! Получилось!
     
  7. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    Появился еще один вопрос, если не сложно ответте пожалуйста.
    Как в Edit Text добовлять текст а не перерисовывать его заново
    вот к примеру я пишу так:

    .data
    Text db "Win32 assembly is great and easy!",0

    invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR Text

    каждый раз когда выполняется invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR Text тест в окошке
    Edit перерисовывается заново, как можно сделать чтобы он добавлялся

    или мне лучше в программе зарезервировать какую нибудь область (буфер) для текста который хочу вывести, заполнять его полностью а потом как понадобиться выводить?
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EM_SETSEL, EM_REPLACESEL
     
  9. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    Пришу вот таким образом:

    invoke SendMessage,hEdit,EM_SETSEL,0,-1
    invoke SendMessage,hEdit,EM_REPLACESEL,-1,-1
    invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR fd.cFileName

    а в Edit никак не реагирует, может быть не так воспользовался?
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1)
    То есть, "выделяем" текст от последнего символа до конца.

    А точнее?
     
  11. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    тоесть эта часть кода
    invoke SendMessage,hEdit,EM_SETSEL,0,-1
    invoke SendMessage,hEdit,EM_REPLACESEL,-1,-1
    invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR fd.cFileName

    в цикле выполняется, но в при выходе из цикла в Edit видно только последнее добавленное значение fd.cFileName

    грубо говоря цикл такой

    начало цикла:
    получаем значение fd.cFileName
    invoke SendMessage,hEdit,EM_SETSEL,0,-1
    invoke SendMessage,hEdit,EM_REPLACESEL,-1,-1
    invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR fd.cFileName
    конец цикла

    проверял цикл работает постоянно другие разные значения получает для fd.cFileName а в Edit отображается только последнее

    сейчас попробывал SendMessage,hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1
    что то на GetWindowTextLength ругается еще пока разбираюсь :)
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ээ, это синтаксис си был. Тебе так:
    Код (Text):
    1. invoke GetWindowTextLength,hEdit
    2. invoke SendMessage,hEdit,EM_SETSEL,eax,-1
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Так ты же выделяшь от начала до конца и заменяешь выделение. А надо выделять только конец. Тогда текст добавляться будет.
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    int CharCnt = SendMessageA(hEdit, WM_GETTEXTLENGTH, 0, 0);
    SendMessageA(hEdit, EM_SETSEL, CharCnt, CharCnt);
    SendMessageA(hEdit, EM_REPLACESEL, 0, (ULONG)Text);
    SendMessage(hEdit, EM_LINESCROLL, 0, 1);
     
  15. asmer

    asmer New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2003
    Сообщения:
    14
    Адрес:
    Russia
    Спасибо всем!! разобрался, просто сначала не правильно понял работу сообщения EM_REPLACESEL