Igorek Опубликовано 20 апреля, 2015 Поделиться Опубликовано 20 апреля, 2015 Нужен чат, как в VK, как реализовать смайлы? Цитата Ссылка на комментарий
0 brunnengi Опубликовано 20 апреля, 2015 Поделиться Опубликовано 20 апреля, 2015 Хороший вопрос. Как ты его будешь решать я не знаю. Да и как остальные решают этот вопрос я тоже не в курсе. Однако сейчас я сам начинаю писать чат-программу (чисто для себя, без всякой заявки и претензии). Мой вариант реализации будет таков: Берем Layout, это у нас будет "облачком" со всей репликой. Каждая строчка это тоже TLayout внутри "облачка", тока выравнивание Top (что бы к верху все прижимались). Высота таких строчек из Layout 32 пикселя. При вставке текста создаем новый TText и вставляем его в первую строчку с выравниванием по левому краю и ставим ему АвтоРасширение ширины в зависимости от содержимого текста. Если место в строчке еще есть (сама строчка не более 40 символов или не более 280 пикселей примерно пока), то при вставке смайлика (этот картинка) создаем TImage и присваиваем ему родителя первую строчку и выравнивание также по левому краю, так что он прижмется к тексту "Привет". Примерно вот такой план. На днях буду пробовать его реализовывать. Посмотрим что получиться. Если у какого то есть конструктивные идеи получше, то выслушаю внимательно. А то может мой вариант избыточен и есть более гибкий и изящный вариант. Rusland 1 Цитата Ссылка на комментарий
0 xenon54 Опубликовано 21 апреля, 2015 Поделиться Опубликовано 21 апреля, 2015 Думаю актуально будет юзать ImageList, чтобы не засирать память повторяющимися смайлами. Вообще, задачка кончено кропотливая получается и весьма актуальная, думаю что на самом деле оч многие сталкиваются с этим, но понимая что все это придется реализовывать руками, забивают не начав. Уверен что даже многие уже это реализовали, но попросту не выкладывают из-за того что потратили кучу времени на разработку сего чуда Цитата Ссылка на комментарий
0 Igorek Опубликовано 24 апреля, 2015 Автор Поделиться Опубликовано 24 апреля, 2015 Хороший вопрос. Как ты его будешь решать я не знаю. Да и как остальные решают этот вопрос я тоже не в курсе. Однако сейчас я сам начинаю писать чат-программу (чисто для себя, без всякой заявки и претензии). Мой вариант реализации будет таков: Берем Layout, это у нас будет "облачком" со всей репликой. Каждая строчка это тоже TLayout внутри "облачка", тока выравнивание Top (что бы к верху все прижимались). Высота таких строчек из Layout 32 пикселя. При вставке текста создаем новый TText и вставляем его в первую строчку с выравниванием по левому краю и ставим ему АвтоРасширение ширины в зависимости от содержимого текста. Если место в строчке еще есть (сама строчка не более 40 символов или не более 280 пикселей примерно пока), то при вставке смайлика (этот картинка) создаем TImage и присваиваем ему родителя первую строчку и выравнивание также по левому краю, так что он прижмется к тексту "Привет". Примерно вот такой план. На днях буду пробовать его реализовывать. Посмотрим что получиться. Если у какого то есть конструктивные идеи получше, то выслушаю внимательно. А то может мой вариант избыточен и есть более гибкий и изящный вариант. но ведь иредактора из этого не полyчится? а для отображения идеальный вариант) Цитата Ссылка на комментарий
0 AndreyS Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 Если бы мне пришлось сейчас писать чат, то первым делом я бы попробовал использовать WebBrowser. И для вывода результатов и для редактирования текста. Насчет вывода результатов - вообще проблем не вижу - сверстал страничку (самый простой вариант - таблицу) из предыдущих сообщений и отобразил. При желании в эту же страничку можно насовать и оформление текста и javascript. По поводу редактирования: ставим на форму еще один компонент WebBrowser и вставляем в него код страницы, содержащий какой-либо текстовый редактор (типа того, что используется на этом же форуме, хотя можно и любой другой в интернете их куча бесплатных и опенсорсных), при желании убираем из него все лишние панели инструментов и отображаем в этом компоненте. Далее кидаем на форму кнопку отправить, берем напечатанный текст со смайлами, форматированием текста и пр., сохраняем его если надо куда-нибудь типа базы данных или еще что и добавляем к отображенным сообщениям. Правда, если разрешаем пользователям форматирование, нужно подстраховаться и убрать из введенного текста все лишние теги, чтобы особо умные не пихали javascript'ы и не портили собеседникам жизнь. Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 (изменено) Первое, что приходит в голову - это использовать компонент типа TGroupBox в качестве контейнера для компонент, хранящих сообщения. В качестве таких можно использовать TText. Во время ввода/редактирования текста можно использовать TEdit, в котором смайлы записываются своими символьными комбинациями "))" ":)" и т.д. Можно как ввести вручную (многие пользователи их знают), можно по нажатии на пинктограмму (тогда в тексте в текущей позиции курсора появится соответствующий пинктограмме набор символов). После нажатия на кнопку "отправить сообщение" в TGroupBox добавляется новый компонент TText с содержимым Edit-a. При этом в качестве дочернего элемента к нему создается TImage с загруженной в него пинктограммой соответствующей введенной комбинации символов. Этот Timage свойством bringtofront выводится поверх своего родителя, а в качестве координат указываются координаты первого символа из комбинации (их нужно определить), вместо самой комбинации вставить два-три пробела, чтобы избавиться от текста в месте вставки изображения. Изменено 24 апреля, 2015 пользователем Alex7wrt Цитата Ссылка на комментарий
0 brunnengi Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 но ведь иредактора из этого не полyчится? а для отображения идеальный вариант) Согласен. Но никто не говорит что похожие задачи должны решаться одними и теме же методами. Я когда концепцию обдумывал, то понимал что для редактора не совсем то. Так что над этой частью я еще подумаю. Если бы мне пришлось сейчас писать чат, то первым делом я бы попробовал использовать WebBrowser. Этот вариант в своей жизни я проходил. Он рабочий. Но не комильфо так делать. С таким же успехом можно просто открывать страничку в интернете через этот же браузер. А уже та самая страничка и будет чатом, точнее веб чатом. Я кстати вижу периодически в ГуглМаркете приложения которые типа "приложение". А их открываешь, а он тупо страничку в инете от этой компании показывает. Так что для норм приложения нужно нормально подходить к делу. А если создавать TWebBrowser для каждого отображения инфы, то оперативка застрелиться. Да и сам компонент не особо шустрый, не все фишки html поддерживает, так что... Что касается редактора, то сначала к этой проблеме нужно подойти, а там видно. Понятно что нужно что то вроде Edit или Memo. Однако если потом придется все равно пихать image и выравнивать, то с таким же успехом, можно оставить Label и image, но перехватывать ввод с клавиатуры для Layout в котором они лежат. Короче тут идеи в принципе рабочие, но практика, как всегда покажет, как надо было)) Цитата Ссылка на комментарий
0 AndreyS Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 Этот вариант в своей жизни я проходил. Он рабочий. Но не комильфо так делать. С таким же успехом можно просто открывать страничку в интернете через этот же браузер. А уже та самая страничка и будет чатом, точнее веб чатом. Я кстати вижу периодически в ГуглМаркете приложения которые типа "приложение". А их открываешь, а он тупо страничку в инете от этой компании показывает. Так что для норм приложения нужно нормально подходить к делу. А если создавать TWebBrowser для каждого отображения инфы, то оперативка застрелиться. Да и сам компонент не особо шустрый, не все фишки html поддерживает, так что... Согласен, у WebBrowser есть свои недостатки. Но представьте, сколько придется перелопатить возможных вариантов взаимодействия с редактором, которые нужно правильно обрабатывать и отображать пользователю чатом (взять хотя бы скролл длинного сообщения со смайлами, изменение ширины блока для ввода текста с включенным WordWrap, выделение блока текста, включающего смайлы + его копипаст)? Насчет того, что он не слишком шустрый - я думаю, для отображения пары сотен сообщений его производительности вполне хватит, тем более редактора. Насчет памяти - мне кажется 2 компонента не столько сожрут ее, сколько сотни TLayout,TText, TImage. По поводу фишек - с простым чатом (без 3D текста, анимации и пр.) даже у старенького IE проблем возникнуть не должно. Цитата Ссылка на комментарий
0 Alex7wrt Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 Появилась интересная мысль - а что если добавить смайлики в шрифт в качестве символов? Если это возможно, то все становится одним сплошным текстом. Только желательно чтобы размер смайликов можно было выбирать независимо от размера шрифта. Цитата Ссылка на комментарий
0 AndreyS Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 Тогда они будут одноцветными и нельзя будет сделать смайлики с анимацией Цитата Ссылка на комментарий
0 brunnengi Опубликовано 24 апреля, 2015 Поделиться Опубликовано 24 апреля, 2015 Появилась интересная мысль - а что если добавить смайлики в шрифт в качестве символов? Если это возможно, то все становится одним сплошным текстом. Только желательно чтобы размер смайликов можно было выбирать независимо от размера шрифта. А идея хорошая. Я и забыл что так можно. Тогда они будут одноцветными и нельзя будет сделать смайлики с анимацией Анимации и так лучше не делать. Если 140 смайликов на экране будут анимацию играть, то телефон залипнет. А вот одноцветность это да, это плохо, тут согласен. Надо подумать что можно сделать. Цитата Ссылка на комментарий
0 xenon54 Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 (изменено) Есть такой шрифт как эмодзи(у многих он стоит на телефонах как раз для печати смайлов в текстах). Так вот, пробовал вводить на IOS в Memo смайл от этого шрифта, а потом на канве отрисовывал текст, которы включает эти символы(смайлы). К удивлению нужно сказать, что метод отрисовки текста на канве рисовал эти символы как смайлы, причем нормальные смайлы, желтые там все дела, а не монохромные. У меня возникла тогда проблема как их правильно отправить на сервер, с кодировкой лажа, сервак проглатывает эти символы, решить проблему с кодировкой куда проще чем трахаться с какой-то отрисовкой десятков TImage с вычислением их координат, аодгонкой под скролл и т.д., это полный ... Взять даже самый популярный месенджер вотсап, он смайлов не имеет Имхо это самый реальный и простейший способ сделать смайлы в чате. Все кто пользуется смайлами с девайсов имеют клавиатуру эмодзи. Изменено 25 апреля, 2015 пользователем xenon54 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 (изменено) Хмм... Я понял о чем ты. Не поленился и кинул на форму Memo и залил приложение на Андроид 4.4 Переключился на эмоушэн клавиатуру, и.... вот что выходит: http://ovrload.ru/f/50597_tempfileforshare_(1).jpg все в монохромке. Взять даже самый популярный месенджер вотсап, он смайлов не имеет В каком смысле "не имеет". У него вроде свой набор смайликов. Отличных от системных. лично у меня так на Андройде. Вот то что коды некоторых из них совпадают это да. Но набор смайликов отличен от системного, как по количеству (вроде), так и по самим картинкам. Изменено 25 апреля, 2015 пользователем brunnengi Цитата Ссылка на комментарий
0 xenon54 Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 (изменено) Мдэ, видать и то и другое сильно отличается на ведре и огрызке На гейфоне нет собственных смайлов у вотсапа и эмодзи в мемо отображаются нормально, не так как у вас на скрине на ведре А еще затея с чатом осложняется этим багом в мемо. Изменено 25 апреля, 2015 пользователем xenon54 Цитата Ссылка на комментарий
0 brunnengi Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 ))))) А жаль что не так ( А то на мгновение я обрадовался что решение прям на поверхности... Цитата Ссылка на комментарий
0 xenon54 Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 Быть может нужно выбрать правильный шрифт? Цитата Ссылка на комментарий
0 brunnengi Опубликовано 25 апреля, 2015 Поделиться Опубликовано 25 апреля, 2015 Хз. По переключай шрифты, не помогло. Но такое ощущение что Андроид приложение так и так берет шрифты по умолчанию. Да к тому же, он вроде и вставляет их, по крайней мере форма и черты есть. А вот в цвете не отрисовывает. Цитата Ссылка на комментарий
0 Igorek Опубликовано 2 мая, 2015 Автор Поделиться Опубликовано 2 мая, 2015 http://www.tmssoftware.com/site/tmsfmxpack.asp?s=fmxricheditor#features yстанови триал, там есть RichEditor с поддержкой смайлов Цитата Ссылка на комментарий
0 xenon54 Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 (изменено) Видел, устанавливал, но цена это забей. Изменено 2 мая, 2015 пользователем xenon54 Цитата Ссылка на комментарий
0 Igorek Опубликовано 2 мая, 2015 Автор Поделиться Опубликовано 2 мая, 2015 Видел, устанавливал, но цена это забей. пользyйся триалом Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 Что касается тамошнего RichEditor - он жутко тормозной, при относительно небольших размерах текста, загруженных в него. И это даже без вставки графики. Цитата Ссылка на комментарий
0 Igorek Опубликовано 3 мая, 2015 Автор Поделиться Опубликовано 3 мая, 2015 Что касается тамошнего RichEditor - он жутко тормозной, при относительно небольших размерах текста, загруженных в него. И это даже без вставки графики. для чата хватит Цитата Ссылка на комментарий
0 ruslan Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Что касается тамошнего RichEditor - он жутко тормозной, при относительно небольших размерах текста, загруженных в него. И это даже без вставки графики. для чата хватит ты им пользовался САМ ?) Цитата Ссылка на комментарий
0 brunnengi Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 TMS Component'ы очень тяжелые. Я им пользовался. При n-ом количестве программа начинает заметно работать медленнее. Так что, не знаю как вы, но вот их компоненты я точно использовать не буду. p.s. хотя справедливости ради замечу, что у них весьма функциональные компоненты. И компоненты для FMX я не использовал, юзал тока для VCL. Может для FMX что то и поменялось, но осадок от VCL версии напрочь отбивает желание даже пробовать. Цитата Ссылка на комментарий
0 ruslan Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 уверяю Вас - стало только хуже ) AngryOwl 1 Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Согласен и с [ruslan] и с [brunnengi], так как являюсь обладателем платной версии TMSPack. Очень тяжелые и тормозные компоненты. А что касается чата - я сказал что он тормозной потому-что уже пробовал. И поверьте "покрутил" его как мог - не катит... Как только у вас в чате будет не одно сообщение с одним смайликом, так вы и поймете... Цитата Ссылка на комментарий
Вопрос
Igorek
Нужен чат, как в VK, как реализовать смайлы?
Ссылка на комментарий
34 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.