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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2014, 19:40   #1
Timon.cheg
Пользователь
 
Регистрация: 10.04.2014
Сообщений: 24
Вопрос RichView замена кодов на смайлы

Доброго времени суток уважаемые, написал чат, Гугл предложил мне использовать компонент RichView для отображения смайлов.

Как выводить это все дело отдельно я разобрался, но бьюсь над проблемой автозамены (в хелпе ничего путного не нашел, в гугле тоже). Задача на первый взгляд простая:

RichView1.AddNL(Приходящее сообщение ,0,0);
// найти в этом сообщении подстроку '!smile02' и заменить рисунком из имеджбокса.
RichView1.Format;

Прошу вашей помощи, может кто уже сталкивался.
Timon.cheg вне форума Ответить с цитированием
Старый 25.07.2014, 22:14   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

При отсылке сообщения в котором, есть смайлы. Замени их на теги. При получение эти теги заменяй на смайлы. Кажись использовался метод AddObject.
P.S. Я бы вообще не использовал RichView, а использовал TWebBrowser для отображения пересылки. С html-тегами всегда проще получалось.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 27.07.2014, 06:59   #3
Timon.cheg
Пользователь
 
Регистрация: 10.04.2014
Сообщений: 24
По умолчанию

Хотелось бы использовать именно этот компонент, разве никто не использовал его ?
Timon.cheg вне форума Ответить с цитированием
Старый 27.07.2014, 17:23   #4
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Timon.cheg Посмотреть сообщение
Хотелось бы использовать именно этот компонент, разве никто не использовал его ?
Нормальные программы(RaidCall, Skype) используют HTML- протоколы. Я использовал его и у меня получалось. До тебя тут были подобные темы. Я не знаю, как точно работает AddObject, но картинку в виде GIF, которой являются все смайлики, оно может и не отобразить. Для полного отображения всей переписки лучше использовать TWebBrowser или подобные ему, которые используют движки от браузеров. А для написания сообщения можно использовать и обычные Memo или RichEdit. Браузеры используют для отображения GIF-анимаций, воспроизведения аудио и видео-файлов FlashPlayer. HTML-теги можно легко найти в интернете.
Как устроена такая программа:
1. Пользователи подключаются к друг другу.
2. Пользователь пишет сообщение в виде обычного текста(без html-тегов!). Текст для тегов можно описать как делают это на форумах.
3. Пользователь отправляет сообщение. Программа должна сначала проверить активно ли соединение с другим пользователем, следом отправить в виде текста по строчно(или целиком) всё что там написал пользователь.
4. Программа, которая у другого пользователя принимает текст. И тут вступаем мы. Мы должны это всё сначала обработать текст(обработать теги в html-код). Затем мы должны составить html-страницу и обновить её. Остается только ответить отправителю, что всё готово. Словами это описать довольно трудно, в коде выглядит проще.
5. У отправителя по получению ответа программа должна либо вывести сообщение об ошибке(хотя если это делать в try expert, то сообщение об ошибки получим сразу же), либо показать в виде пораграфа на веб-странице, то что написал пользователь.
GIF-картинки смайлов можно хранить в виде отдельных файлов либо на сервере(любом, где можно получить прямую ссылку), либо будет выгоднее хранить их у пользователей(рядом с программой).
Кстати вот код картинки:
Код HTML:
<img src="ссылка на картинку">
Ссылка на картинку не с сервера выглядит так:
localhost/полный файловый путь до неё.
Пример:
localhost/C:/1.gif
Так же лучше оформить ссылку на веб-страницу, которая будет отображать переписку.
Я не знаю, какая у тебя версия компилятора. Но для пересылки информации рекомендуют использовать протокол TCP. Компонент idTCPServer, idTCPClient.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 28.07.2014, 02:00   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Для полного отображения всей переписки лучше использовать TWebBrowser или подобные ему, которые используют движки от браузеров.
На самом деле в Miranda IM TabSRMM как-то работает на системном RichEdit-е и даже анимированные смайлики отображает. Нужно смотреть в его исходниках, как он это делает. Исходники на C++ под WinAPI.

В общем случае предполагаю, что это делается через встраиваемые OLE-объекты, которые системный RichEdit поддерживает.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 28.07.2014, 11:37   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
На самом деле в Miranda IM TabSRMM как-то работает на системном RichEdit-е и даже анимированные смайлики отображает. Нужно смотреть в его исходниках, как он это делает. Исходники на C++ под WinAPI.

В общем случае предполагаю, что это делается через встраиваемые OLE-объекты, которые системный RichEdit поддерживает.
На технологии Ole-контейнера работают браузеры. Я кое-что слышал об этом раньше, но не думал, что затрону эту тему ещё раз.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 28.07.2014, 18:08   #7
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
На технологии Ole-контейнера работают браузеры.
Не браузеры, а только IE.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 28.07.2014, 18:12   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

RichView тоже использует виндовый рич.
Человек_Борща вне форума Ответить с цитированием
Старый 28.07.2014, 18:37   #9
Timon.cheg
Пользователь
 
Регистрация: 10.04.2014
Сообщений: 24
По умолчанию

Запостил параллельно на форуме разработчика... вот что ведует

В демо есть 3 способа замены строк с графикой:
- SearchText + InsertBullet. Этот метод не слишком полезно для чатов
- Разбор текстовой строки перед добавлением в TRichView
- Обнаружение при печатании.

Я изначально пытался использовать 2ой метод, используя while do програма зависала при 3 - 6 ом раскодировании ((
Код:
while
 (pos('!smile',zapis)>0) and (StrToIntDef(copy(zapis,(pos('!smile',zapis)+6),2),0)>0)
      and (StrToIntDef(copy(zapis,(pos('!smile',zapis)+6),2),0)<24) // проверяю число смайла (их 24)
  do
      begin
         Sminum:=StrtoInt(copy(zapis,(pos('!smile',zapis)+6),2));     //присваиваю
         RichView1.AddNL(copy(zapis,1,pos('!smile',zapis)-1) ,0,-1); // добавляю подстроку ДО смайла
         delete(zapis,1,pos('!smile',zapis)+7);                               // удаляю ненужную подстроку
         RichView1.AddBullet(Sminum,ImageList2,false);                 //сам смайл
      end;


 RichView1.Add(zapis ,0);   //все остальное
 RichView1.Format;

Последний раз редактировалось Stilet; 28.07.2014 в 21:30.
Timon.cheg вне форума Ответить с цитированием
Старый 28.07.2014, 20:15   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

задал в поиск и не где не упомянаються AddNL или addBullet. Ты откуда это откопал?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смайлы Яр|/||< (^_^) Свободное общение 3 19.11.2009 13:27
(:] Смайлы в Delphi 7 [:) Fezilk Мультимедиа в Delphi 13 23.08.2009 13:46
Смайлы в чате full Shouldercannon Общие вопросы Delphi 28 30.12.2008 15:48
смайлы L1NK. Свободное общение 2 24.08.2008 16:46
Смайлы в чате. Teen4jump Общие вопросы Delphi 5 05.03.2008 21:20