Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

принцип вставления смайликов в ICQ.   Найти похожие ветки 

 
Elvis   (2005-06-03 12:43) [0]

Расскажите мне пожалуйста по какому принципу вставляются смайлики в ICQ.
И тот кто получает сообщение видит смайлик который был вставлен .....


 
dmitry501 ©   (2005-06-03 12:51) [1]

Elvis   (03.06.05 12:43)
Смайлики передаются обычними символами, например :), :( а клиент преобразует его в картинку


 
Jeer ©   (2005-06-03 12:54) [2]

:-&       лишившийся дара речи; смутившийся; косноязычный
:-р       высовывающий язык
:-s       непоследовательный, бессвязный
:-/       скептик
:-\       нерешившийся
о:-)      ангел
>:-)      дьявол
:-q       пытающийся достать языком до носа
:-а       то же самое, но с другой стороны
:-е       разочарованный
:-о       ox-ox
:-9       облизывающий губы
:-О       не ори! (также оратор)


 
Eraser ©   (2005-06-03 13:03) [3]

Elvis   (03.06.05 12:43)

То, что описАл dmitry501 ©   (03.06.05 12:51) [1] это ещё пол беды -- реализуется не так сложно, главная проблема обратный процесс, т.е. преобразование картинки в смайлик. Сам давно хочу выяснить, как это работает.


 
Digitman ©   (2005-06-03 13:09) [4]


> Расскажите мне пожалуйста по какому принципу вставляются
> смайлики в ICQ


в ICQ никакие "смайлики" не вставляются, ICQ - это сеть, работающая по спецпротоколу, в котором ни каких смайликов не было и нет.

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


 
Elvis   (2005-06-03 13:17) [5]

>>>программа-клиент, "умеющая" в поступающих текстовых сообщениях распознавать комбинации символов (см.выше) и интерпретировать их как команды на отрисовку в соотв.позициях соотв.смайликов
>>>
ну дык а как такое сделать-то??


 
Alexander Panov ©   (2005-06-03 13:20) [6]

Elvis   (03.06.05 13:17) [5]
ну дык а как такое сделать-то??


Так в чем проблема?
Алгоритм простой.
Перед передачей кода смайлика вставляешь неотображаемый символ-флажок в передаваемый поток данных.
На приемной стороне проверяй. Вот и весь алгоритм.


 
iskatel ©   (2005-06-03 15:51) [7]

на кой икс флажок? просто в полученной строчки ищешь комбинации символов образующих смайлики...


 
Alexander Panov ©   (2005-06-03 15:58) [8]

iskatel ©   (03.06.05 15:51) [7]

А на такой, что такая комбинация символов - не обязательно смайлик.


 
Eraser ©   (2005-06-03 16:00) [9]

Alexander Panov ©   (03.06.05 15:58) [8]

Не... iskatel ©   (03.06.05 15:51) [7] прав, никаких флажков там нету, т.к. даже если вручную набрать смайли - его преобразует в картинку.


 
Kerk ©   (2005-06-03 16:02) [10]

Флажков там нету :)) идет простой текст вида :) :( и и.д... как юзер миранды хорошо с этим знаком :)) Периодически набиваю вещи вроде *JOKINGLY* :))))


 
Fay ©   (2005-06-03 16:14) [11]

(.)(.) Ms. Dos


 
Alexander Panov ©   (2005-06-03 16:36) [12]

Eraser ©   (03.06.05 16:00) [9]
никаких флажков там нету, т.к. даже если вручную набрать смайли - его преобразует в картинку.


Причем здесь "Там"?
Человеу надо сделать подобную вещь, как я понимаю.
И делать надо не как там, а как правильно.


 
Игорь Шевченко ©   (2005-06-03 16:39) [13]

Alexander Panov ©   (03.06.05 16:36) [12]


> И делать надо не как там, а как правильно.


Посмотри протокол мастаковского чата. Смайлики есть, а невидимых флажков нету.


 
Eraser ©   (2005-06-03 16:43) [14]

Alexander Panov ©   (03.06.05 16:36) [12]

По той же причине, что я написал в [9] по-другому сделать нельзя, т.к. некоторым пользователям, например Kerk"у удобнее "набирать" смайлик вручную, при этом не о каких флажках не может быть и речи.

Другой вопрос это обратное преобразование. ICQ клиент (и не только, VyPress тоже так умеет) умеет "преобразовывать" картинку-смайлик в текстовый смайлик, т.е. в картинках-смайликах есть какие-то иднтификаторы... так и не разобрался как оно сделано.. если кто знает раскажите, буду очень благодарен ;-)


 
Игорь Шевченко ©   (2005-06-03 16:52) [15]

Eraser ©   (03.06.05 16:43) [14]


> это обратное преобразование


Какое обратное преобразование ? Ты о чем ? Картинки возникают только в момент отображения сообщения.


 
Eraser ©   (2005-06-03 16:55) [16]

Игорь Шевченко ©   (03.06.05 16:52) [15]

Не... когда в ICQ-клиенте в менюшке выбираешь смайлик - он появляется в тексте отправителя в ГРАФИЧЕСКОМ виде, т.е. картинкой. Если эту картинку перетащит на какой-нибудь RichEdit, например WordPad, то картинка преобразуется в текстовое представление... попробуйте.


 
Gero ©   (2005-06-03 17:00) [17]


> Alexander Panov ©   (03.06.05 16:36)

Это смотря что требуется.
Если нужно преборазование текста в смайлы — то флажки не нужны.
Если предполагается, что юзер будет каждый раз наживать «вставить смайл», то нужны. Но это не очень удобно.


 
BasiL_666_ ©   (2005-06-03 17:02) [18]

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


 
Eraser ©   (2005-06-03 17:06) [19]

BasiL_666_ ©   (03.06.05 17:02) [18]

Дык не везде вставляются текстовые варианты, ICQ 2003, 4, 5 видел? При нажатии "вставить смайл" вставляется картинка.


 
Игорь Шевченко ©   (2005-06-03 17:09) [20]

Eraser ©   (03.06.05 17:06) [19]


> При нажатии "вставить смайл" вставляется картинка.


Отображается, а не появляется. Почувствуйте разницу.


 
Eraser ©   (2005-06-03 17:16) [21]

Игорь Шевченко ©   (03.06.05 17:09) [20]

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


 
Игорь Шевченко ©   (2005-06-03 17:20) [22]

Eraser ©   (03.06.05 17:16) [21]


>  только где вот этот текст хранится...


Внутре :) Путешествует промеж клиентом и сервером и обратно.


 
BasiL_666_ ©   (2005-06-03 17:39) [23]

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


 
Alexander Panov ©   (2005-06-03 17:44) [24]

Ну так про то и речь идет.
ICQ-клиенту без разницы, что ъхотел пользователь. Если в тексте встретится определенная комбинация символов, он смайл отобразит. Но это ведь неправильно.


 
Eraser ©   (2005-06-03 17:46) [25]

BasiL_666_ ©   (03.06.05 17:39) [23]
вставляетсмя в любом случае текстовый вариант смайла


Куда вставляется?

передается тоже текстовый вариант

Откуда передаётся?


 
Eraser ©   (2005-06-03 17:47) [26]

BasiL_666_ ©   (03.06.05 17:39) [23]

Ты хочешь сказать, что имеется скрытая копия редактора ввода, где смайлы всегда текстовые... врядли.


 
BasiL_666_ ©   (2005-06-03 17:49) [27]

куда те нада туда и вставляется (Memo, RichEdit и тд..)...
а передается по сети или по инету все зависит от клиента...
наскока я понял делается именно сообственный ICQ-клиент...


 
Eraser ©   (2005-06-03 17:51) [28]

BasiL_666_ ©   (03.06.05 17:49) [27]

Делается новая версия одной моей проги ) не, с ICQ пока не связано...


 
BasiL_666_ ©   (2005-06-03 17:52) [29]

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


 
Eraser ©   (2005-06-03 17:55) [30]

BasiL_666_ ©   (03.06.05 17:52) [29]
я не понимаю а в чем может быть проблема при написание сообщения заменять их сразу на картинки???


Да хочется, чтобы при написании сообщения, если выбрать в меню картинку-смайл вставлялась НЕ надпись *LOL*, а картинка, как в ICQ.


 
Игорь Шевченко ©   (2005-06-03 17:58) [31]

Eraser ©   (03.06.05 17:55) [30]

В ICQ вставляется надпись. Которая отображается, как картинка.


 
Eraser ©   (2005-06-03 18:00) [32]

Игорь Шевченко ©   (03.06.05 17:58) [31]

А как это можно самому организовать? Возможно ли это сделать на базе TJvRichEdit?


 
BasiL_666_ ©   (2005-06-03 18:01) [33]

я так полагаю это трудно реализуемо, если меня до сих пор не поняли.... вообщемто не буду спорить.. я говорил как эту проблему понимал я.... не более того...


 
Alexander Panov ©   (2005-06-03 18:09) [34]

Eraser ©   (03.06.05 18:00) [32]

Да реализвать можно как угодно.
Тот же клиент ICQ хранит информацию, связанную с любым отображаемым объектом.

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


 
Alexander Panov ©   (2005-06-03 18:10) [35]

Eraser ©   (03.06.05 18:00) [32]
я так полагаю это трудно реализуемо


Это не сложно.


 
Eraser ©   (2005-06-03 18:11) [36]

BasiL_666_ ©   (03.06.05 18:01) [33]

Просто в посте [29] ты напсал 2 противоречащие друг другу мысли "заменять их сразу на картинки" и "то есть вставляется не картинка, а ее текстовый вариант" прочитал это несклько раз, так и не понял, что ты имел ввиду.


 
Alexander Panov ©   (2005-06-03 18:14) [37]

Eraser ©   (03.06.05 18:11) [36]

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

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


 
Eraser ©   (2005-06-03 18:14) [38]

Alexander Panov ©   (03.06.05 18:09) [34]

О, это уже ближе к телу )
Просто хотелось бы на 100% узанть, что не сществует типовых вариантов.
А насчёт координат - опять же врядли... в том, то и проблема - идентифицировать рисунок.

Буду разбираться.


 
Eraser ©   (2005-06-03 18:16) [39]

Alexander Panov ©   (03.06.05 18:14) [37]

Класс окна ввода в ICQ 5 - RichEdit20A....


 
Alexander Panov ©   (2005-06-03 18:18) [40]

Eraser ©   (03.06.05 18:14) [38]
А насчёт координат - опять же врядли... в том, то и проблема - идентифицировать рисунок.


Ну вот. Опять снова то же самое.

В любом редакторе, который поддерживает вставку объектов, отличных от текста, необходимо сохранять информацию об этих объектах. Для этого приложение сохздает массив структур, которые связаны каждая со своим объектом.

Как минимум, в этой структуре хранятся:
 позиция для отображения на канве(x,y)
 размеры либо ссылка на исходный объект.

При любых перерисовках канвы эти сруктуры динамически изменяются для актуализации тех же координат отображения на канве.

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


 
Eraser ©   (2005-06-03 18:22) [41]

Alexander Panov ©   (03.06.05 18:14)

Полностью согласен. Так делается, если писать тестовый редактор с нуля. Но ICQ-редактор НЕ написан с нуля см. [39].


 
Alexander Panov ©   (2005-06-03 18:30) [42]

Eraser ©   (03.06.05 18:22) [41]
Но ICQ-редактор НЕ написан с нуля см.


а при чем тут ICQ?
Если надо вытаскивать именно из ICQ-клиета, то необходимо разобраться, как хранятся данные в его редакторе в исходном коде.


 
Eraser ©   (2005-06-03 18:37) [43]

Alexander Panov ©   (03.06.05 18:30) [42]
а при чем тут ICQ?


ICQ при том, что использует тот же компонент, что и обёртка TJvRichEdit, а именно RichEdit20A, соответственно "как хранятся данные в его редакторе" относится не к коду ICQ, а к коду этого самого RichEdit20A, соответственно, это можно сделать и через TJvRichEdit или напрямую обращаясь к RichEdit20A через дескриптор в TJvRichEdit, весь вопрос "как"...


 
Игорь Шевченко ©   (2005-06-03 21:50) [44]

Eraser ©   (03.06.05 18:37) [43]

Можно сделать. Как - очень просто, ищещь способ вставить в RichEdit картинку, находишь его, потом, анализируя текст, который надо вставить в RichEdit, вместо нужных фрагментов текста вставляешь картинки найденным выше способом. Собственно так же, как любой browser видя тэг <img> вставляет вместо него картинку :)

Hint: html-страницы внутрь себя картинку не вставляют, являясь текстом :) В них картинка указывается именем файла. Тебе проще, так как набор смайликов ограничен, то для того, чтобы вставить смайлик, достаточно его кода (например ":)"), по которому ты его однозначно идентифицируешь.


 
Eraser ©   (2005-06-03 22:12) [45]

Игорь Шевченко ©   (03.06.05 21:50) [44]

ищещь способ вставить в RichEdit картинку


Нашёл. Метод InsertBitmap, основанный на технологии OLE.

procedure TJvCustomRichEdit.InsertBitmap(ABitmap: TBitmap; const Sizeable: Boolean);
var
 OleClientSite: IOleClientSite;
 Storage: IStorage;
 OleObject: IOleObject;
 ReObject: TReObject;
 DataObject: IDataObject;
 Selection: TCharRange;
 FormatEtc: TFormatEtc;
begin
 if HandleAllocated and Assigned(FRichEditOle) then
 begin
   DataObject := TImageDataObject.Create(ABitmap);

   FillChar(ReObject, SizeOf(TReObject), 0);
   IRichEditOle(FRichEditOle).GetClientSite(OleClientSite);
   Storage := nil;
   OleObject := nil;
   try
     CreateStorage(Storage);

     FormatEtc.cfFormat := CF_METAFILEPICT;
     FormatEtc.ptd := nil;
     FormatEtc.dwAspect := DVASPECT_CONTENT;
     FormatEtc.lindex := -1;
     FormatEtc.tymed := TYMED_MFPICT;

     OleCheck(OleCreateStaticFromData(DataObject, IOleObject, OLERENDER_FORMAT,
       @FormatEtc, OleClientSite, Storage, OleObject));
     OleSetContainedObject(OleObject, True);
     try
       FillChar(ReObject, SizeOf(TReObject), #0);
       with ReObject do
       begin
         cbStruct := SizeOf(TReObject);
         cp := REO_CP_SELECTION;
         poleobj := OleObject;
         OleObject.GetUserClassID(clsid);
         pstg := Storage;
         polesite := OleClientSite;
         dvAspect := DVASPECT_CONTENT;
         if Sizeable then
           dwFlags := REO_RESIZABLE;
         //OleCheck(OleSetDrawAspect(OleObject,
         //  Data.dwFlags and PSF_CHECKDISPLAYASICON <> 0,
         //  Data.hMetaPict, dvAspect));
       end;
       SendMessage(Handle, EM_EXGETSEL, 0, Longint(@Selection));
       Selection.cpMax := Selection.cpMin + 1;
       OleCheck(IRichEditOle(FRichEditOle).InsertObject(ReObject));
       SendMessage(Handle, EM_EXSETSEL, 0, Longint(@Selection));
       IRichEditOle(FRichEditOle).SetDvaspect(
         Longint(REO_IOB_SELECTION), ReObject.dvAspect);
     finally
       ReleaseObject(OleObject);
     end;
   finally
     ReleaseObject(OleClientSite);
     ReleaseObject(Storage);
   end;
 end;
end;


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

Проанализировал, вставил.
А вот дальше проблема. Как отправалять данный текст. Есть 2 варианта:
1. Сохранять все данные rtf вместе с вндрёнными объектами, то бишь рисунками и отправлять. Этот вариант сейчас рабочий.
2. Преобразовывать картинки в текстовое представление и отправлять rtf без объектов (картинок), как это делает ICQ.

Хотелось бы применять 2 вариант. Но опять же повторюсь, проблема в идентификации УЖЕ вставленных смайликов, которые НЕ в виде *LOL* , а ввиде объектов (картинок).

Надеюсь на этот раз я понятно объяснил проблему ;-)


 
Игорь Шевченко ©   (2005-06-03 22:20) [46]


> Проанализировал, вставил.
> А вот дальше проблема. Как отправалять данный текст.


А ты отправляй не тот, который отображается, а тот, который анализируешь.


 
Eraser ©   (2005-06-03 22:33) [47]

Игорь Шевченко ©   (03.06.05 22:20) [46]

Эх... хотелось бы отправлять! ) Да где его взять то.
Тем более трюки в ICQ с перетаскиванием смайлика на другой контрол, о которых я писАл наводят на мысль, что инф-я о смайлики хранится в самом объекте рисунке, и этот объект имеет свойство в котором эта инфа хранится, а не в каком-то стороннем массиве с координатами.
ИМХО есть способ без изобретения велосипедов.
К сожалению с OLE знаком очень плохо.. :*(

Игорь Шевченко ©   (03.06.05 21:50) [44]
Hint: html-страницы внутрь себя картинку не вставляют, являясь текстом :) В них картинка указывается именем файла. Тебе проще, так как набор смайликов ограничен, то для того, чтобы вставить смайлик, достаточно его кода (например ":)"), по которому ты его однозначно идентифицируешь.


Насчёт HTML я подумывал, но пока что считаю, что RichEdit использовать удобнее. Тем более подкуает, что аська и VyPress Chat построены на RichEdit, а это лучшие прграммы в своих областях.


 
Игорь Шевченко ©   (2005-06-03 22:49) [48]

Eraser ©   (03.06.05 22:33) [47]

HTML - это данные.
RichEdit - элемент отображения данных.

Неужели трудно увидеть разницу ? Например, если тебе нужно передать данные для построения диаграммы в Excel, ты же передаешь набор значений, а не снимаешь ее изображение Print Screen"ом, и не передаешь получившееся изображение, правильно ?
Тоже самое и тут - то, что передается, отличается от того, каким образом оно отображается.


> аська и VyPress Chat построены на RichEdit


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


 
Eraser ©   (2005-06-03 22:57) [49]

Игорь Шевченко ©   (03.06.05 22:49) [48]
HTML - это данные.
RichEdit - элемент отображения данных.


Да эт я прекрасно понимаю. Проблема в том, что RichEdit является не только элементом отображения данных, но и инструментом взаимодействия с этими данными, т.е. их формирования.

Возьмём опять же пример с перетаскиванием. Пользователь ведь не нажимает, какую-то "левую" кнопку, чтобы перетащить выделеный смайл на другой контрол, он перетаскивает ОТОБРАЖАЕМЫЙ элимент..., в свою очередь RichEdit (т.е. интерфейс взаимодействия) может подменить этот элимент нужными текстовыми данными.
Проблема в том, что я не знаю как пользоваться этой "интерфейсной" возможность.


 
Игорь Шевченко ©   (2005-06-03 23:05) [50]

Eraser ©   (03.06.05 22:57) [49]

Пользователь, когда перетаскивает, уведомляет RichEdit, что произошло событие. RichEdit уведомляет программу, что на него что-то перетащили. При этом событии программа знает, какой объект перетаскивается, и программе же не затруднит в текст для отправки вставить нужную комбинацию символов и отобразить в RichEdit"е картинку вместо этой комбинации. То есть, RichEdit сам при перетаскивании на него картинки никакую картинку не вставит, насколько мне известно, такой функциональности в нем не предусмотрено.


 
Eraser ©   (2005-06-03 23:14) [51]

Игорь Шевченко ©   (03.06.05 23:05) [50]

Так я ж имею ввиду обратный процесс. Возмём для "понятности" ту же ICQ.
Имеется контрол ввода сообщения, которое нужо отправить. Имеется меню, в котором отображены смайлика. Мы вибираем из этого меню нужный смайлик и он в графическом виде отображается на контроле ввода. Далее наводим мышу на этот смайлик и перетаскиваем в WordPad, там отображается смайлик в текстовом виде, т.е. :-).
Понятно что в момент начала операции dragNdrop ICQ подменила выделенный OLE объект-рисунок, на текст, но вопрос в том, откуда она ICQ узнала о том, что перетаскивается именно объект, обозначающий какой-то конкретный определённый смайлик ":-)"? Меня интерсует именно техническая сторона вопроса...


 
Игорь Шевченко ©   (2005-06-03 23:31) [52]


> на текст, но вопрос в том, откуда она ICQ узнала о том,
> что перетаскивается именно объект, обозначающий какой-то
> конкретный определённый смайлик


Определила, в какой позиции в RichEdit был перетаскиваемый объект, рассчитала длину текста, проанализировала текст в этом месте, отдала.


 
Eraser ©   (2005-06-03 23:38) [53]

Игорь Шевченко ©   (03.06.05 23:31) [52]

Чтож - логично... похоже на правду, почему бы и нет... Буду подробно разбираться в механизме dragNdrop.
Если у кого есть полезные ссылки по этой теме, буду признателен.


 
Игорь Шевченко ©   (2005-06-03 23:50) [54]


> Если у кого есть полезные ссылки по этой теме


Есть статья MBo на этом сайте в разделе "Статьи"


 
Eraser ©   (2005-06-03 23:59) [55]

Игорь Шевченко ©   (03.06.05 23:50) [54]

Статья хорошая, правда в моём случае нужен OLEDragNDrop.


 
аматор ©   (2005-06-04 10:37) [56]

http://www.everaldo.com/ - эт прога смахивающая на аську
зайди и полазь
там даже исходники


 
аматор ©   (2005-06-04 10:40) [57]

ссори сылки сплутал http://dmess.ytu.ru/


 
Eraser ©   (2005-06-04 13:39) [58]

аматор ©   (04.06.05 10:40) [57]

Да видел я уже эти исходники, там необычно сделана вставка смайла, но распознвания нету.
Спасибо всё равно!



Страницы: 1 2 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.031 c
14-1117491469
KilkennyCat
2005-05-31 02:17
2005.06.29
Если кому нужна работа в Петербурге


14-1117958876
Piter
2005-06-05 12:07
2005.06.29
Что с интернетом?


3-1116249702
juice
2005-05-16 17:21
2005.06.29
Создатель базы


14-1117462017
Fessio
2005-05-30 18:06
2005.06.29
хелп плизз с методом резолюций


1-1117879184
Kolan
2005-06-04 13:59
2005.06.29
Условная компиляция