![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Допустим, имеется изображение(оно может быть разное) в RichEdit. Как его можно преобразовать в текст, чтобы для каждой картинки был свой "идентефикатор"? Помимо картинки в RichEdite может быть ещё и текст.
Сообщение отредактировано: Unconnected - 11.06.2009 20:39 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Допустим, имеется изображение(оно может быть разное) в RichEdit А ты попробовал в стандартный TRichEdit запихать изображение, прежде, чем такое допускать? Код приведи, который добавляет к текущему содержимому TRichEdit (допустим, там только текст) снизу картинку 'A.GIF'... А потом будешь допускать что-то... |
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Картинка в RichEdit уже добавляется, в том и дело, модуль прикрепил (в сети нашёл его). Правда, я использую не TRichEdit, а TsRichEdit, из пакета AlphaControls, ну это роли не играет в принципе.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Насколько я понимаю, это для твоего ICQ-клиента, чтоб передавать и хранить в истории что-то типа : COOL : для отображения cool.bmp? Тогда можно сделать так: не преобразовывать изображение в текст, а наоборот. Смотри: заводишь переменную типа TStringList, которая будет хранить текст, отрисовываемый в RichEdit, и при получении от собеседника очередной строки текста, добавляешь ее не в RichEdit, а сначала в этот StringList, а уж потом содержимое добавленной строки отрисовываешь в RichEdit. Обычной функцией Pos можно искать идентификаторы картинок, их у тебя будет не так много, я думаю, и выводить новую строку в RE по частям: то, что ДО id картинки - это простой текст, потом вместо ID вставляешь картинку через тот же InsertBitmap, а потом - проверяешь оставшуюся часть строки на наличие ID... Как результат - в RichEdit хранится собственно отображение переписки, а StringGrid содержит готовую историю...
Добавлять изображения в RE можно точно так же: добавлять в текущую позицию каретки ID картинки, и тут же рисовать строку InsertBitmap-ом... Опять же понадобится доп. переменная для хранения строки с ID... |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Насколько я понимаю, это для твоего ICQ-клиента, чтоб передавать и хранить в истории что-то типа : COOL : для отображения cool.bmp? Тогда можно сделать так: не преобразовывать изображение в текст, а наоборот. Смотри: заводишь переменную типа TStringList, которая будет хранить текст, отрисовываемый в RichEdit, и при получении от собеседника очередной строки текста, добавляешь ее не в RichEdit, а сначала в этот StringList, а уж потом содержимое добавленной строки отрисовываешь в RichEdit. Обычной функцией Pos можно искать идентификаторы картинок, их у тебя будет не так много, я думаю, и выводить новую строку в RE по частям: то, что ДО id картинки - это простой текст, потом вместо ID вставляешь картинку через тот же InsertBitmap, а потом - проверяешь оставшуюся часть строки на наличие ID... Как результат - в RichEdit хранится собственно отображение переписки, а StringGrid содержит готовую историю... Добавлять изображения в RE можно точно так же: добавлять в текущую позицию каретки ID картинки, и тут же рисовать строку InsertBitmap-ом... Опять же понадобится доп. переменная для хранения строки с ID... Ну, почти угадал... ![]() -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
![]()
Сообщение
#6
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Добавлять изображения в RE можно точно так же: добавлять в текущую позицию каретки ID картинки, и тут же рисовать строку InsertBitmap-ом... Опять же понадобится доп. переменная для хранения строки с ID... Или ответ на мой вопрос кроется в этой фразе? Я просто не совсем понял её смысл, что это за InsertBitmap и как с помощью него можно Рисовать строку? -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата что это за InsertBitmap ![]() |
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Ну, я этой процедурой и добавляю, там нужно имя ричэдита в неё вписать и хэндл битмапа в качестве параметров. Только вот там нельзя определять, куда именно вставлять битмап. По крайней мере, я не знаю:)
Сообщение отредактировано: Unconnected - 12.06.2009 15:08 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Только вот там нельзя определять, куда именно вставлять битмап Битмап всегда вставляется в текущую позицию, туда, где находится курсор... Это сказано в DRKB, об этом же говорил Krid (автор модуля) там, где выкладывал этот модуль... То есть, все, что тебе надо - это установить курсор туда, куда нужно, а потом добавить изображение... |
Unconnected |
![]()
Сообщение
#10
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Ага, в принципе всё ясно... И ещё, как можно получить текущую позицию курсора в RichEdit?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
"DRKB -> VCL -> TRichEdit -> Каретка -> Позиция курсора в TRichEdit"
![]() |
Unconnected |
![]()
Сообщение
#12
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Спасибо, наконец иду дальше:)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
![]()
Сообщение
#13
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Возникло одно непредвиденное затруднение...
Оформил я, значит, процедуру GetPosition в виде функции, возвращающей координаты курсора, и сделал формирование строки сообщения. Всё это дело висит на событии OnKeyPress РичЭдита. Выглядит вот так: Function TForm1.GetPosition(Sender:TsRichEdit):TPoint; Вот так формируется строка. Если вставляется смайл, то в строку входит блок типа "#&номер_смайла#0". И это даже работает. Проблема в другом, допустим, пользователь набрал сообщение, со смайлом, вдруг увидел опечатку и стёр полмессаджа, в котором и был смайл. Как это можно отразить на формируемой строке? Я не могу придумать именно алгоритм действий. Можно, в принципе, обрабатывать нажатия BackSpace и Delete, но тогда придётся обработать ещё и ситуацию, когда пользователь выделил кусок текста и нажал Delete... Что посоветуете?.. Сообщение отредактировано: Unconnected - 16.06.2009 14:06 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата придётся обработать ещё и ситуацию, когда пользователь выделил кусок текста и нажал Delete ![]() |
Unconnected |
![]()
Сообщение
#15
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата yes2.gif Придется... Если хочешь сделать работоспособную программу. Причем, ничего сложного-то в этом нет, тебе достаточно при получении VK_DELETE посмотреть, с какой позиции и сколько элементов удаляется (SetStart и SelLength), и удалить их из messag тоже... Хм... ну допустим, а вот если в выделенном фрагменте будет смайл? Позицию, как я понял, он будет занимать одну, а вот в параллельной строке он занимает несколько символов... Тогда ещё надо узнать как то, есть ли в выделенном фрагменте смайлы... -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Я окончательно запутался в том, что ты делаешь... Создавай тестовый проект, в котором будет только заполнение RichEdit-а так, как ты это делаешь, желательно, стандартными средствами (TRichEdit, а не какие-то посторонние компоненты, ICQClient-ы всяческие меня тоже не интересуют, я ничего постороннего ставить не буду, только то, что идет по умолчанию в Дельфи), архивируй его и присоединяй сюда. Откроется/запустится - попробую подсказать. Нет - значит нет, сразу предупреждаю.
Иначе получается "переливание из пустого в порожнее", я не телепат, чтобы знать, как именно ты все это организовал, что тебе надо "бабка за дедку, дедка за репку" и только потом что-то важное у тебя происходит. Надо видеть код, причем ТОЧНЫЙ код, а не "вот тут как-то так, а вот тут что-то типа этого". |
Unconnected |
![]()
Сообщение
#17
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Volvo, у тебя AlphaControls не установлен случаем? Просто создание панели смайлов и иже с нею идёт с помощью ImageList'а, который обычный SpeedButton не поддерживает.
Просто иначе я могу показать добавление только кодом, который компилироваться не будет... Сообщение отредактировано: Unconnected - 18.06.2009 21:59 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
![]()
Сообщение
#18
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Вот часть проекта с формированием строки, все компоненты там по умолчанию, за исключением TsSpeedButton'ов... Ну, уж если нет, так нет, буду по другому как-то делать
![]() -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 10:13 |