проблема такая пытаюсь 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 ?
через GetDlgItem можешь для этого использовать макрос GetDlgItm Macro hdlg,idctrl,hctrl invoke GetDlgItem,hdlg,idctrl IfNB <hctrl> mov hctrl,eax EndIf EndM использование: GetDlgItm hWnd,IDC_EDIT1,hEdit
у меня по ходу еще одни вопрос возник, а как сделать чтобы в EditText при редактировании переход на другую строку был при нажатии на Enter а не Ctrl+Enter вообще то странно раньше помоему всегда на Enter переходило
Появился еще один вопрос, если не сложно ответте пожалуйста. Как в 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 перерисовывается заново, как можно сделать чтобы он добавлялся или мне лучше в программе зарезервировать какую нибудь область (буфер) для текста который хочу вывести, заполнять его полностью а потом как понадобиться выводить?
Пришу вот таким образом: invoke SendMessage,hEdit,EM_SETSEL,0,-1 invoke SendMessage,hEdit,EM_REPLACESEL,-1,-1 invoke SendMessage,hEdit,WM_SETTEXT,0,ADDR fd.cFileName а в Edit никак не реагирует, может быть не так воспользовался?
SendMessage(hEdit,EM_SETSEL,GetWindowTextLength(hEdit),-1) То есть, "выделяем" текст от последнего символа до конца. А точнее?
тоесть эта часть кода 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 ругается еще пока разбираюсь
Ээ, это синтаксис си был. Тебе так: Код (Text): invoke GetWindowTextLength,hEdit invoke SendMessage,hEdit,EM_SETSEL,eax,-1
Так ты же выделяшь от начала до конца и заменяешь выделение. А надо выделять только конец. Тогда текст добавляться будет.
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);