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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2010, 15:57   #1
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию Как это сделать?

И снова добрый день.
Есть RichEdit. А нужно реализовать отображение смайлов.
Я создаю что-то на подобии локального чата, и дошло дело до смайлов. Пытался реализовать с помощью InsertBitmapToRE (re_bmp.dcu), но функция вставляет смайл в поле ввода текста, а с параметром ClientSocket.Socket.Send не переходит в чат, а просто на месте изображения пустота.

Так что решил позаимствовать функцию смайлов как в p2p сетях:
1. При нажатии на иконку смайла в поле ввода заносится его "строка", которая является названием. К примеру, нажимая на в поле ввода идёт "...=)...", а не изображение.
2. При отправке сообщения, в RichEdit все указаные в массиве смайлы заменяются на изображения (почему в массиве, потому как смайлик то не один будет, а легче держать инфу так).

Помогите такое сделать? Процедуру можно поставить на таймер, но нужна еще сама процедура, которая будет менять найденые указаные символы в RichEdit и есть находит - заменять на изображение (желательно на изображение из ImageList)


P.S. Еще есть БОЛЬШАЯ проблема:
res:=Pos(BadWord[i],username.text);
Error: Missing operator of semicolon;

Почему при проверке пишет такое?? Нужен оператор разделения (кома или тп). Ставлю точку - пишет что нужен тип Array.
А раньше такого небыло. Почему?
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });

Последний раз редактировалось Sensizu; 02.01.2010 в 16:11.
Sensizu вне форума Ответить с цитированием
Старый 02.01.2010, 16:02   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

В Delphi Russian Knowledge Base описано как вставлять в RichEdit bmp'шки. Код примера слишком большой, чтобы писать его здесь. Скачай себе DRKB, там есть много советов как по RichEdit (и про подсветку тоже) так и вообще по компонентам и Дельфи.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 02.01.2010, 16:45   #3
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Я Вам безгранично благодарен! =)
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 02.01.2010, 17:34   #4
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Если чесно, почитав около 3-4 вариаций "как вставить бмп в ричедит", нужного так и не нашёл(

Кругом не то, кругом InsertBitmapToRe, а мне нужно клиенту через сокет послать смайлик (причем смайли к в сообщении, если бы просто картинку я бы использовал потоки), а серверу показать смайлик именно в ТОМ месте где он и был вставле в поле ввода.

Так как?
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 02.01.2010, 17:39   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Сначала нужно определиться с целями - Вам картинку в RichEdit или сокету послать? Если Вы не заметили, то вообще-то это совершенно два разных вопроса, не имеющих отношения друг к другу. Вам нужно было вставить картинку, я предложил вариант где взять. В виде чего передается информация?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 02.01.2010, 18:04   #6
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Ну, если мой вопрос непонятен - значит я его непонятно сформулировал.

Ладно, просто скажу:
Нужно сделать таймер, который будет искать в строках RichEdit'a текст "=)" и заменять его на изображение (желательно из ImageList).
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });

Последний раз редактировалось Sensizu; 02.01.2010 в 18:33.
Sensizu вне форума Ответить с цитированием
Старый 03.01.2010, 10:26   #7
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

http://www.bsalsa.com/Downloads/Rich...o_Exe_File.zip
не знаю как они это сделали, но думаю, что покопав можно повторить (demo - insert smiles)

А вообще, если бы вы нормально назвали тему, то внизу было бы полно похожих
http://www.programmersforum.ru/showthread.php?t=60792
http://www.trichview.com/forums/viewtopic.php?t=63
http://www.programmersforum.ru/showthread.php?t=6516
http://www.programmersforum.ru/showthread.php?t=38369

зы: а вообще поиск по ключевому слову смайлы рулит..
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 03.01.2010, 15:58   #8
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Пересмотрел все вышеуказаные ссылки. Ничего нужного мне нет.
Там другой смысл - постить смайлы при отправке. Мне же нужно находить символы смайлов в RichEdit и заменять на картинку. Да, в одном из премеров хорошо описан массив со смайлами и кодами, но функция парсинга имеет лишних (для меня) строк 90%, а самому оставить нужное не получается.

(да и пример с англоязычного сайта идёт с компонентов TRichView, а у меня RichEdit, и желательно его оставить).

Очень прошу, даже если такая тема и поднималась (хотя я не знаю), лишний раз ткнуть пальец м нужное, или написать код. Я сомневаюсь что это грань фантастики заменять кусок текста на картинки, но у меня для этого опыта еще не хватает.

Заранее спасибо.
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 03.01.2010, 16:07   #9
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Насчёт опыта сюда

Ищите смайлы после отправки ( '=)', ':d' или другие) и заменяйте их. Можно даже не по таймеру, а по приходу / уходу сообщения (при изменении текста в ричЕдит на худой конец).

Можно посмотреть ваши наработки и что конкретно не работает?!

А ещё можно посмотреть здесь, здесь, а ещё конкретнее разверните спойлер во втором посте.
[Ferox]

Последний раз редактировалось postal2; 03.01.2010 в 16:10.
postal2 вне форума Ответить с цитированием
Старый 03.01.2010, 16:18   #10
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Сейчас дам мои наработки, хотя их почти нет (на счёт смайлов).

1. Список смайлов хранится в отдельной форме. При нажатии на смайл пользуюсь такой процедурой:
Цитата:
function InsertSmile(const SmileCode:string):integer;
begin
chatform.mess.text:=chatform.mess.t ext+' '+SmileCode;
end;
Ну а потом на Image1.OnClick:
Цитата:
InsertSmile('=)');
Таким образом вставляю код смайла в поле ввода, которое лежит на другой форме.

Пока что работает только это. Дальше пытаюсь заменить на картинку как-то так:
Цитата:
FindAt:=chat.findText('=)',chat.lin es.IndexOf(chat.lines.count-1),length('=)'),[]);
Почему беру поиск только в последней строке (chat.lines.IndexOf(chat.lines.coun t-1)), потому как если буду делать таймером, то поиск во всех строках начиная с первой будет конкретно тормозить программу, это же чат, и строк в нём будет много.

Процедуру вставки картинки на место найденого кода FindAt еще не придумал.. Пробывал InsertBitmapToRE, но проблематично разделить сообщение ДО смайла и ПОСЛЕ (особенно если смайлов больше чем один).

Выше рассмотрел только вариант для смайла "=)", а вообще планировал деражать их в массиве:

Цитата:
for i:=1 to High(EmoticonsCode[i]) do begin
FindAt:=chat.findText(EmoticonsCode[i],chat.lines.IndexOf(chat.lines.coun t-1),length(EmoticonsCode[i],[]);
if FindAt<>-1 do ... //вставка изображения на индекс найденого кода
end
Всё очень не обдумано и не ясно, извените. С последних сил бьюсь тем, что знаю.
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как это сделать loidxxx Microsoft Office Access 3 19.09.2009 11:00
Как такое сделать (извените. но даже не знаю как это называется) Van'Denis HTML и CSS 3 30.08.2009 10:46
как это сделать? DeDoK Общие вопросы Delphi 2 11.07.2008 04:41
Не знаю как это сделать:) LSDkltn БД в Delphi 2 09.11.2007 13:39