· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Вывод текста

Посл.отвђт Сообщенiе


Дата: Окт 8, 2003 15:35:07

Приветствую! Помогите разобраться. Хочу выводить текст в
EditBox(... or ES_MULTILINE or ES_READONLY or ...) в несколько строк, каждая строка - отдельная переменная. Можно-ли это осуществить с помощью SetWindowText (как позиционировать вывод), если нельзя, то какой функцией это лучше сделать.


Дата: Окт 8, 2003 18:06:34 · Поправил: AsmGuru62

Стиль EditBox должен включать (ES_MULTILINE or ES_WANTRETURN).
Для добавления текста - EM_REPLACESEL.
Каждая строка должна заканчиваться CR+LF.
.DATA
strLine1 db 'Line #1',0Dh,0Ah,0

strLine2 db 'Line #2',0Dh,0Ah,0

strLine3 db 'Line #3',0Dh,0Ah,0


Дата: Окт 8, 2003 18:47:54

Не работает, выводит только последний стринг, причём не с левой стороны EditBoxа, а с правой, как будто я выставил ES_RIGHT. На ES_LEFT не реагирует.


Дата: Окт 8, 2003 19:15:51

А можно увидеть код где EditBox создан и где добавляются строки?


Дата: Окт 8, 2003 19:26:51

640kb
Для первой линии вызывай WM_SETTEXT, а для последующих - EM_REPLACESEL. Проверено.


Дата: Окт 8, 2003 20:38:25 · Поправил: 640kb

2 Quantum: Это получается что мне нужно после первого SetWindowText создавать новый EditBox ?


2 AsmGuru62:
...
MESSAGE_1 db 'MESSAGE_1',13,10,0
MESSAGE_2 db 'MESSAGE_2',13,10,0
...
 invoke CreateWindowEx, 0, addr EditClassName, 0, \
  WS_CHILD or WS_VISIBLE or WS_BORDER or \
  ES_AUTOVSCROLL or ES_READONLY or ES_MULTILINE or \
  ES_WANTRETURN or EM_REPLACESEL, 270, 25, 280, 320, \
  hWnd, EDIT_1_ID, hInstance, 0
  mov hwnd_EDIT_1, eax
...  
  .elseif uMsg==WM_COMMAND
   mov eax,wParam
   .if lParam!=0
   
    .if ax==BUTTON_1_ID
     shr eax, 16
     .if ax==BN_CLICKED
       invoke SetWindowText, hwnd_EDIT_1, addr MESSAGE_1
       invoke SetWindowText, hwnd_EDIT_1, addr MESSAGE_2
...
 


Дата: Окт 8, 2003 21:57:54

640kb
Неееет!

invoke SetWindowText, hwnd_EDIT_1, addr MESSAGE_1
invoke SetWindowText, hwnd_EDIT_1, addr MESSAGE_2


Надо так:
invoke SetWindowText,hwnd_EDIT_1,OFFSET MESSAGE_1
invoke SendMessage,hwnd_EDIT_1,EM_REPLACESEL,0,OFFSET MESSAGE_2


Дата: Окт 8, 2003 22:56:23

Воркинг! Спасибо!!!

А в чём разница применения OFFSET и ADDR? С ADDR тоже работает.


Дата: Окт 8, 2003 23:01:06 · Поправил: 640kb

Хотя есть прикол (сразу не заметил). MESSAGE_1 оказывается в конце выведенного списка, выглядит так:
MESSAGE_2
MESSAGE_3
MESSAGE_4
MESSAGE_1

И всё равно выводится как будто я применил ES_RIGHT


Дата: Окт 8, 2003 23:56:14

С первым приколом разобрался, просто все сообщения нужно выводить через SendMessage, а с правосторонним выводом не могу разобраться.


Дата: Окт 9, 2003 02:49:56

640kb
А в чём разница применения OFFSET и ADDR?
У меня на ADDR аллергия. Код на одну инструкцию больше генерируется. Рекомендую дизассемблировать эту прогу и констатировать факт. Иногда, правда, приходится юзать ADDR, через нехочу :)


Дата: Окт 9, 2003 10:40:46

Понятно.
А что делать с правосторонним выводом?


Дата: Окт 9, 2003 11:04:16

Всё, разобрался.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.089