Перейти к содержанию
Fire Monkey от А до Я
  • 0

Чат со смайлами


Igorek

Вопрос

Рекомендуемые сообщения

  • 0

Хороший вопрос.

Как ты его будешь решать я не знаю. Да и как остальные решают этот вопрос я тоже не в курсе.

Однако сейчас я сам начинаю писать чат-программу (чисто для себя, без всякой заявки и претензии).

Мой вариант реализации будет таков:

Берем Layout, это у нас будет "облачком" со всей репликой.

Каждая строчка это тоже TLayout внутри "облачка", тока выравнивание Top (что бы к верху все прижимались).

Высота таких строчек из Layout 32 пикселя.

При вставке текста создаем новый TText и вставляем его в первую строчку с выравниванием по левому краю и ставим ему АвтоРасширение ширины в зависимости от содержимого текста. Если место в строчке еще есть (сама строчка не более 40 символов или не более 280 пикселей примерно пока), то при вставке смайлика (этот картинка) создаем TImage и присваиваем ему родителя первую строчку и выравнивание также по левому краю, так что он прижмется к тексту "Привет".

 

Примерно вот такой план. На днях буду пробовать его реализовывать. Посмотрим что получиться.

 

Если у какого то есть конструктивные идеи получше, то выслушаю внимательно. А то может мой вариант избыточен и есть более гибкий и изящный вариант. 

Ссылка на комментарий
  • 0

Думаю актуально будет юзать ImageList, чтобы не засирать память повторяющимися смайлами. Вообще, задачка кончено кропотливая получается и весьма актуальная, думаю что на самом деле оч многие сталкиваются с этим, но понимая что все это придется реализовывать руками, забивают не начав. Уверен что даже многие уже это реализовали, но попросту не выкладывают из-за того что потратили кучу времени на разработку сего чуда :)

Ссылка на комментарий
  • 0

Хороший вопрос.

Как ты его будешь решать я не знаю. Да и как остальные решают этот вопрос я тоже не в курсе.

Однако сейчас я сам начинаю писать чат-программу (чисто для себя, без всякой заявки и претензии).

Мой вариант реализации будет таков:

Берем Layout, это у нас будет "облачком" со всей репликой.

Каждая строчка это тоже TLayout внутри "облачка", тока выравнивание Top (что бы к верху все прижимались).

Высота таких строчек из Layout 32 пикселя.

При вставке текста создаем новый TText и вставляем его в первую строчку с выравниванием по левому краю и ставим ему АвтоРасширение ширины в зависимости от содержимого текста. Если место в строчке еще есть (сама строчка не более 40 символов или не более 280 пикселей примерно пока), то при вставке смайлика (этот картинка) создаем TImage и присваиваем ему родителя первую строчку и выравнивание также по левому краю, так что он прижмется к тексту "Привет".

 

Примерно вот такой план. На днях буду пробовать его реализовывать. Посмотрим что получиться.

 

Если у какого то есть конструктивные идеи получше, то выслушаю внимательно. А то может мой вариант избыточен и есть более гибкий и изящный вариант. 

но ведь иредактора из этого не полyчится? а для отображения идеальный вариант)

Ссылка на комментарий
  • 0

Если бы мне пришлось сейчас писать чат, то первым делом я бы попробовал использовать WebBrowser. И для вывода результатов и для редактирования текста. Насчет вывода результатов - вообще проблем не вижу - сверстал страничку (самый простой вариант - таблицу) из предыдущих сообщений и отобразил. При желании в эту же страничку можно насовать и оформление текста и javascript.

 

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

 

Правда, если разрешаем пользователям форматирование, нужно подстраховаться и убрать из введенного текста все лишние теги, чтобы особо умные не пихали javascript'ы и не портили собеседникам жизнь.

Ссылка на комментарий
  • 0

Первое, что приходит в голову - это использовать компонент типа TGroupBox в качестве контейнера для компонент, хранящих сообщения. В качестве таких можно использовать TText. Во время ввода/редактирования текста можно использовать TEdit, в котором смайлы записываются своими символьными комбинациями "))" ":)" и т.д. Можно как ввести вручную (многие пользователи их знают), можно по нажатии на пинктограмму (тогда в тексте в текущей позиции курсора появится соответствующий пинктограмме набор символов).

После нажатия на кнопку "отправить сообщение" в TGroupBox добавляется новый компонент TText с содержимым Edit-a. При этом в качестве дочернего элемента к нему создается TImage с загруженной в него пинктограммой соответствующей введенной комбинации символов. Этот Timage свойством bringtofront выводится поверх своего родителя, а в качестве координат указываются координаты первого символа из комбинации (их нужно определить), вместо самой комбинации вставить два-три пробела, чтобы избавиться от текста в месте вставки изображения.

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0

 

 

но ведь иредактора из этого не полyчится? а для отображения идеальный вариант)

Согласен. Но никто не говорит что похожие задачи должны решаться одними и теме же методами. 

Я когда концепцию обдумывал, то понимал что для редактора не совсем то. Так что над этой частью я еще подумаю.

 

 

 

Если бы мне пришлось сейчас писать чат, то первым делом я бы попробовал использовать WebBrowser.

Этот вариант в своей жизни я проходил. Он рабочий. Но не комильфо так делать. С таким же успехом можно просто открывать страничку в интернете через этот же браузер. А уже та самая страничка и будет чатом, точнее веб чатом.

Я кстати вижу периодически в ГуглМаркете приложения которые типа "приложение". А их открываешь, а он тупо страничку в инете от этой компании показывает. Так что для норм приложения нужно нормально подходить к делу. А если создавать TWebBrowser для каждого отображения инфы, то оперативка застрелиться. Да и сам компонент не особо шустрый, не все фишки html поддерживает, так что...

 

 

Что касается редактора, то сначала к этой проблеме нужно подойти, а там видно. Понятно что нужно что то вроде Edit или Memo.

Однако если потом придется все равно пихать image и выравнивать, то с таким же успехом, можно оставить Label и image, но перехватывать ввод с клавиатуры для Layout в котором они лежат. Короче тут идеи в принципе рабочие, но практика, как всегда покажет, как надо было))

Ссылка на комментарий
  • 0

Этот вариант в своей жизни я проходил. Он рабочий. Но не комильфо так делать. С таким же успехом можно просто открывать страничку в интернете через этот же браузер. А уже та самая страничка и будет чатом, точнее веб чатом.

Я кстати вижу периодически в ГуглМаркете приложения которые типа "приложение". А их открываешь, а он тупо страничку в инете от этой компании показывает. Так что для норм приложения нужно нормально подходить к делу. А если создавать TWebBrowser для каждого отображения инфы, то оперативка застрелиться. Да и сам компонент не особо шустрый, не все фишки html поддерживает, так что...

 

Согласен, у WebBrowser есть свои недостатки. Но представьте, сколько придется перелопатить возможных вариантов взаимодействия с редактором, которые нужно правильно обрабатывать и отображать пользователю чатом (взять хотя бы скролл длинного сообщения со смайлами, изменение ширины блока для ввода текста с включенным WordWrap, выделение блока текста, включающего смайлы + его копипаст)?

 

Насчет того, что он не слишком шустрый - я думаю, для отображения пары сотен сообщений его производительности вполне хватит, тем более редактора.

 

Насчет памяти - мне кажется 2 компонента не столько сожрут ее, сколько сотни TLayout,TText, TImage.

 

По поводу фишек - с простым чатом (без 3D текста, анимации и пр.) даже у старенького IE проблем возникнуть не должно.

Ссылка на комментарий
  • 0

Появилась интересная мысль - а что если добавить смайлики в шрифт в качестве символов? Если это возможно, то все становится одним сплошным текстом. Только желательно чтобы размер смайликов можно было выбирать независимо от размера шрифта.

Ссылка на комментарий
  • 0

Появилась интересная мысль - а что если добавить смайлики в шрифт в качестве символов? Если это возможно, то все становится одним сплошным текстом. Только желательно чтобы размер смайликов можно было выбирать независимо от размера шрифта.

А идея хорошая. Я и забыл что так можно.

 

 

Тогда они будут одноцветными и нельзя будет сделать смайлики с анимацией

Анимации и так лучше не делать. Если 140 смайликов на экране будут анимацию играть, то телефон залипнет.

А вот одноцветность это да, это плохо, тут согласен. Надо подумать что можно сделать.

Ссылка на комментарий
  • 0

Есть такой шрифт как эмодзи(у многих он стоит на телефонах как раз для  печати смайлов в текстах). Так вот, пробовал вводить на IOS в Memo смайл от этого шрифта, а потом на канве отрисовывал текст, которы включает эти символы(смайлы). К удивлению нужно сказать, что метод отрисовки текста на канве рисовал эти символы как смайлы, причем нормальные смайлы, желтые там все дела, а не монохромные. У меня возникла тогда проблема как их правильно отправить на сервер, с кодировкой лажа, сервак проглатывает эти символы, решить проблему с кодировкой куда проще чем трахаться с какой-то отрисовкой десятков TImage с вычислением их координат, аодгонкой под скролл и т.д., это полный ... Взять даже самый популярный месенджер вотсап, он смайлов не имеет  :) Имхо это самый реальный и простейший способ сделать смайлы в чате. Все кто пользуется смайлами с девайсов имеют клавиатуру эмодзи.

Изменено пользователем xenon54
Ссылка на комментарий
  • 0

Хмм...

Я понял о чем ты.

Не поленился и кинул на форму Memo и залил приложение на Андроид 4.4

Переключился на эмоушэн клавиатуру, и.... вот что выходит:

 

http://ovrload.ru/f/50597_tempfileforshare_(1).jpg

 

все в монохромке.

 

 

 

Взять даже самый популярный месенджер вотсап, он смайлов не имеет 

В каком смысле "не имеет". У него вроде свой набор смайликов. Отличных от системных. лично у меня так на Андройде. Вот то что коды некоторых из них совпадают это да. Но набор смайликов отличен от системного, как по количеству (вроде), так и по самим картинкам.  

Изменено пользователем brunnengi
Ссылка на комментарий
  • 0

Мдэ, видать и то и другое сильно отличается на ведре и огрызке :)

На гейфоне нет собственных смайлов у вотсапа и эмодзи в мемо отображаются нормально, не так как у вас на скрине на ведре :)

 

А еще затея с чатом осложняется этим багом в мемо.

Изменено пользователем xenon54
Ссылка на комментарий
  • 0

Хз. По переключай шрифты, не помогло. Но такое ощущение что Андроид приложение так и так берет шрифты по умолчанию. 

Да к тому же, он вроде и вставляет их, по крайней мере форма и черты есть. А вот в цвете не отрисовывает.

Ссылка на комментарий
  • 0

Что касается тамошнего RichEditor - он жутко тормозной, при относительно небольших размерах текста, загруженных в него. И это даже без вставки графики.

для чата хватит

Ссылка на комментарий
  • 0

 

Что касается тамошнего RichEditor - он жутко тормозной, при относительно небольших размерах текста, загруженных в него. И это даже без вставки графики.

для чата хватит

 

ты им пользовался САМ ?)

Ссылка на комментарий
  • 0

TMS Component'ы очень тяжелые.

Я им пользовался. При n-ом количестве программа начинает заметно работать медленнее.

Так что, не знаю как вы, но вот их компоненты я точно использовать не буду.

 

p.s. хотя справедливости ради замечу, что у них весьма функциональные компоненты. И компоненты для FMX я не использовал, юзал тока для VCL. Может для FMX что то и поменялось, но осадок от VCL версии напрочь отбивает желание даже пробовать.

Ссылка на комментарий
  • 0

Согласен и с [ruslan] и с [brunnengi], так как являюсь обладателем платной версии TMSPack. Очень тяжелые и тормозные компоненты. А что касается чата - я сказал что он тормозной потому-что уже пробовал. И поверьте "покрутил" его как мог - не катит... Как только у вас в чате будет не одно сообщение с одним смайликом, так вы и поймете...

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...