Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2011, 11:59   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
Вопрос перенос каретки

нужно перенести каретку вниз на новую строку
я использовал

Код:
strPERENOS               DB                      13,10,0
и для этого далее
Код:
invoke lstrcat, offset stroka____1, offset strPERENOS;перенос каретки вниз
        invoke lstrcat, offset stroka____2, offset stroka____1;конкатенация строк
но в итоге никакого переноса каретки не произошло. что сделать?
выводил текст таким образом:
Код:
invoke DrawText, hdc, addr stroka____2, -1, addr rect, DT_CENTER+DT_VCENTER
Dimarik вне форума Ответить с цитированием
Старый 18.09.2011, 12:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Перенести каретку в компоненте типа Мемо?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2011, 14:13   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

ну я просто всё в одной строке пишу и вывожу с помощью DrawText. На белом фоне вывожу.
Мне просто надо чтобы строки одна под одной были.
Ну, можно и в Memo.
Dimarik вне форума Ответить с цитированием
Старый 18.09.2011, 16:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так стоп!! Всетки, вывод в специализированный контрол или собственная отрисовка?
Ибо для DrawText есть ключ переноса строки DT_WORDBREAK :
Код:
invoke DrawText, hdc, addr stroka____2, -1, addr rect, DT_CENTER+DT_VCENTER+DT_WORDBREAK
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2011, 18:14   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

сейчас начал делать нормальное окно с EDIT-ом и у меня вообще какая-то непонятка со стеком пошла.
Окно не создаётся, так как CreateWindowEx (для главного окна) выдаёт ошибку:
ERROR_CANNOT_FIND_WND_CLASS
Я посмотрел в отладчик, там вообще не то что надо в стек помещается!!!!
А как это произошло непонятно! Подскажите, пожалуйста!
вот здесь сам файл.
Эта функция вызывается на строке 431
Это асм-файл http://zalil.ru/31718892

вот скрин с отладчика

как видно, в поля

__in_opt LPCTSTR lpClassName,
__in_opt LPCTSTR lpWindowName,

совсем не то что надо помещается
Изображения
Тип файла: jpg 1_Безымянный.jpg (64.2 Кб, 130 просмотров)

Последний раз редактировалось Stilet; 18.09.2011 в 19:38.
Dimarik вне форума Ответить с цитированием
Старый 18.09.2011, 20:26   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

КАЖЕТСЯ Я ПОНЯЛ ЧТО НЕ ТАК. просто одна переменная в .data затёрла другую.
В смысле одна строка затёрла другую.
Вот только почему это произошло и как надо было этого избежать я не знаю. Подскажите, пожалуйста.

точнее ка избежать пришло на ум: название класса пихнуть в верх, а ту переменную, размер которой будет увеличиваться в самый низ. Только одно непонятно.
Или это кривой вариант или надо было предполагаемую строку объявлять в виде массива из всех нулей.
И в соответствии с этим имеется ещё один важный вопрос. Почему подобных ситуаций не происходит в языках высокого уровня?

Последний раз редактировалось Stilet; 18.09.2011 в 21:00.
Dimarik вне форума Ответить с цитированием
Старый 18.09.2011, 20:59   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а ту переменную, размер которой будет увеличиваться в самый низ.
А ту переменную нужно в куче держать. Опиши указатель на строку и не храни в секции данных разноразмерный контент.
Цитата:
Почему подобных ситуаций не происходит в языках высокого уровня?
Еще как происходит. Просто некоторые компиляторы хранят свои переменки в памяти, которая к секции данных имеет косвенное отношение - стек например, его очищать нет смысла.
Что касается секции данных - обычно ее очищает либо загрузчик (если ее размер указан более чем в файле есть) либо просто сам компилятор в файле дорисовываает нули к секции до 512Кбайт для четности.
Ты просто это не учел.
Еще раз с акцентирую - не храни динамические структуры в секции с константами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2011, 16:30   #8
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

если тебе не трудно, пожскажи, пожалуйста на примере. Просто я с динамическим выделением памяти ещё не работал и немножко не понял о чём речь.
Например, имеется строка
string___STROKA_1 DB "Это строка",0

и в последствии каких-то операций надо выполнять конкатенацию строка, напрнимер
к string___STROKA_1 приклеивать значение в строке STRING_TEMP____
Как бы ты рекомендовал это сделать?
Dimarik вне форума Ответить с цитированием
Старый 19.09.2011, 21:41   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как бы ты рекомендовал это сделать?
Извини, коллега, я не дошел до изучения работы с менеджером памяти на асме
Так уж получилось что пришлось забить на свой проект, где это должно было воплотиться в жизнь.
Однако могу сказать что в мыслях я представлял решение на уровне VirtualAlloc, и переносом старой строки через rep movs в нововыделенное местечко, плюс дописыванием к этому местечку, в конец перенесенной строки новую строку. Так собственно стараются поступать все компиляторы (нативные по крайне мере), а старая строка (имеется ввиду если на нее был указатель) освобождается через VirtualFree, ну а если эта строка была в константах, в секции данных то просто ничего не делать.
Это только моя стратегия, в код я ее не воплощал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2011, 11:53   #10
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Код:
strsrtoka								DB			"xrtoka: ",0, 100 dup(0)
как ты считаешь? так можно делать?
и далее уже с этой строкой работать?
Dimarik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позиция каретки в пикселях(TMemo) Gregor Компоненты Delphi 4 21.12.2010 18:11
Переод каретки в указанное место в RE MyLastHit Общие вопросы Delphi 8 08.08.2010 20:49
Координаты каретки miatu Microsoft Office Word 11 28.08.2009 19:38
Создание второй каретки мыши andreyasu Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 02.07.2009 16:01
Позиционирование каретки Spice Win Api 1 25.03.2009 04:51