Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Принцип распознавания графических смайликов [D7, WinXP]


Страницы:   1 2

Eraser ©   (2005-06-03 17:43:00) 

Вопрос навеян веткой http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117788235&n=0

Необходимо не "преобразовывать" тестовые смайлики ( ;-) ) в графические, а наоборот - картинку-смайлик в текстовый смайлик. Подобный мезханизм применён в ICQ-клиенте, чате для локальной сети VyPress Chat, очивидно, что эта возможность основана на работе самого RichEdit, т.к. если "перетащить" картинку-смайлик на RichEdit (не обязательно TRichEdit) (например в WordPad, MSWord) то эта картинка автоматически преобразуется в набор символов - текстовый смайл.
Довольно много времени потратил на поиск инфы по этой теме, так ничего и не нашёл (

Буду очень признателен за подсказки ;-)


Eraser   (2005-06-04 18:00:00) [1]

KilkennyCat ©   (04.06.05 17:51) [23]

Дело в том, что при добавлении объекта, он никак не идентифицируется.
Вот структура добавляемого OLE объекта

REOBJECT Structure

--------------------------------------------------------------------------------

The REOBJECT structure contains information about an object.

Syntax

typedef struct _reobject {
   DWORD cbStruct;
   LONG cp;
   CLSID clsid;
   LPOLEOBJECT poleobj;
   LPSTORAGE pstg;
   LPOLECLIENTSITE polesite;
   SIZEL sizel;
   DWORD dvaspect;
   DWORD dwFlags;
   DWORD dwUser;
} REOBJECT;
Members

cbStruct
Structure size, in bytes.
cp
Character position of the object.
clsid
Class identifier of the object.
poleobj
Points to an instance of the IOleObject interface for the object.
pstg
Points to an instance of the IStorage interface. This is the storage object associated with the object.
polesite
Points to an instance of the IOleClientSite interface. This is the object's client site in the rich edit control. This address must have been obtained from the IRichEditOle::GetClientSite method.
sizel
A SIZEL structure specifying the size of the object. A 0, 0 on insertion indicates that an object is free to determine its size until the modify flag is turned off.
dvaspect
Display aspect used. See DVASPECT for an explanation of possible values.
dwFlags
Object status flag. It can be a combination of the following values.
REO_BELOWBASELINE
Object sits below the baseline of the surrounding text; the default is to sit on the baseline.
REO_BLANK
Object is new. This value gives the object an opportunity to save nothing and be deleted from the control automatically.
REO_DONTUSEPALETTE
Object is rendered before the creation and realization of a half-tone palette. Applies to 32-bit platforms only.
REO_DYNAMICSIZE
Object always determines its extents and may change despite the modify flag being turned off.
REO_GETMETAFILE
The rich edit control retrieved the metafile from the object to correctly determine the object's extents. This flag can be read but not set.
REO_HILITED
Object is currently highlighted to indicate selection. Occurs when focus is in the control and REO_SELECTED is set. This flag can be read but not set.
REO_INPLACEACTIVE
Object is currently inplace active. This flag can be read but not set.
REO_INVERTEDSELECT
Object is to be drawn entirely inverted when selected; the default is to be drawn with a border.
REO_LINK
Object is a link. This flag can be read but not set.
REO_LINKAVAILABLE
Object is a link and is believed to be available. This flag can be read but not set.
REO_OPEN
Object is currently open in its server. This flag can be read but not set.
REO_RESIZABLE
Object may be resized.
REO_SELECTED
Object is currently selected in the rich edit control. This flag can be read but not set.
REO_STATIC
Object is a static object. This flag can be read but not set.
dwUser
Reserved for user-defined values.


Может кто пояснит где уникальный идентификатор конкретного объекта, я имею ввиду не его CLSID.


KilkennyCat   (2005-06-04 17:51:00) [2]

У каждой картинки есть название.


Eraser   (2005-06-04 17:09:00) [3]

DiamondShark ©   (04.06.05 15:28) [21]

А как обрабатываеть OLE Drag-n-drop события, по-моему стандартные делфевские обработики типа OnDragDrop в этом случае не годятся...?


DiamondShark   (2005-06-04 15:28:00) [4]


> , что эта возможность основана на работе самого RichEdit,
> т.к. если "перетащить" картинку-смайлик на RichEdit (не
> обязательно TRichEdit) (например в WordPad, MSWord) то эта
> картинка автоматически преобразуется в набор символов -
> текстовый смайл.

Фиги.
Эта возможность основана на работе OLE Drag-n-drop.
Когда ты тащишь картинку из клиента, он создаёт DataObject, который либо уже содержит только CF_TEXT, либо несколько форматов, среди которых и CF_TEXT.


Pomestnik   (2005-06-04 14:20:00) [5]

-=XP=- ©   (03.06.05 21:50) [15]
>>P.S. Я что-то не понял, это программа, рисуя смайлики, >>разводит gользователей или Eraser разводит меня?

Мне кажется ты разводишь сам себя....:)


Eraser   (2005-06-04 13:31:00) [6]

Neznaika ©   (04.06.05 11:50) [17]

Могу тебе с 95% увереностью сказать что в ICQ-клиенте нету никакого второго RichEdit'a, просто люди хорошо разобрались в Ole-Drag'n'Drop.

Лучше скажите где про ICQ почитать, как это все работает, и с чего начать разработку собственного клиента(просто любопытно что это за зверь такой ICQ...)

Я делаю НЕ клиент ICQ, но инфа по аське есть http://icq2000cc.hobi.ru/content.html


Neznaika   (2005-06-04 13:21:00) [7]

UP!
Ну скажите где почитать то!


Neznaika   (2005-06-04 11:50:00) [8]

У меня qip2005 cтоит, он вообще не позволяет перетаскивать ничего на другие контролы, и ничего в процессе draga_and_dropa не заменяет!

И вообще, поставь на форму второй RichEdit и по каждому KeyDown копируй текст в него из первого, сделай смайлы в виде меню, и в зависимости от того на какой итем меню было нажато, во второй RichEdit вставляй определенную комбинацию символов, а в первый Rich само изображение, а потом передавай второй Rich.
Естесно надо много чего продумать, но просто как вариант на мой взгляд вполне реально.

Лучше скажите где про ICQ почитать, как это все работает, и с чего начать разработку собственного клиента(просто любопытно что это за зверь такой ICQ...)


Eraser   (2005-06-03 22:43:00) [9]

-=XP=- ©   (03.06.05 21:50) [15]
Eraser разводит меня?


Разводят котят - 1 котёнок на 1 литр ;-)

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

С пом. TJvRichEdit невозможно даже установить факт, что в данном месте с позицией X присутствует объект-рисунок, не говоря уже от том, что это рисунок на самом деле означает. А рисунок присутствует и, как вы правильно заметели правильно преобразуется. Вот я у вас и спрашиваю, как это реализовать?

Это развод пользователя программой.

Как сделать такой же развод пользователя в своей программе? ;-)


-=XP=-   (2005-06-03 21:50:00) [10]

Это развод? Или как? Я что-то пропустил? Или я туплю?

Если все же не развод, поясню:

Программа-клиент принимает сообщение: Привет! ;)
Пишет в окне Привет!и вместо текста ;)(точка с запятой и скобка) рисует смайлик.
Когда же пользователь пытается перетащить смайлик в другую программу, то на самом делеперетаскивается не смайлик, а реальный текст ;)(точка с запятой и скобка).
То-есть, на самом деле никакого смайлика нет. Это развод пользователя программой. Подстава. На самом деле там не смайлик, а текст ;). Развод.

Поэтому ничего распознавать не надо.

P.S. Я что-то не понял, это программа, рисуя смайлики, разводит пользователей или Eraser разводит меня?


Eraser   (2005-06-03 20:03:00) [11]

ferr ©   (03.06.05 19:53) [13]

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


ferr   (2005-06-03 19:53:00) [12]

CRC+FileSize подойдёт?


iskatel   (2005-06-03 18:41:00) [13]


> Eraser ©   (03.06.05 17:43)
> Вопрос навеян веткой http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117788235&n=0


Eraser   (2005-06-03 18:40:00) [14]

iskatel ©   (03.06.05 18:37) [10]
надо было в ветку, которой "навеяно"


А это какая? )


iskatel   (2005-06-03 18:37:00) [15]

блин, не туда запостил, надо было в ветку, которой "навеяно"


iskatel   (2005-06-03 18:29:00) [16]

Удалено модератором
Примечание: Попробуй то же самое без мата?


Eraser   (2005-06-03 17:58:00) [17]

Fay ©   (03.06.05 17:52) [5]

Я ж говорю, проблема не совсем тривиальна. Программ-чатов, которые умеют это делать по пальцам одной руки перечесть.
БОльшая часть программ, при выборе смайлика, вставляет *LOL*, а не картинку... так и я могу )


Eraser   (2005-06-03 17:52:00) [18]

Neznaika ©   (03.06.05 17:49) [3]

Именно.

Alexander Panov ©   (03.06.05 17:50) [4]

Так непонятно даже куда этот код записывать ((
Имеется ф-я InsertImage (по-моему) и всё.


Neznaika   (2005-06-03 17:52:00) [19]

Alexander Panov ©
по моему вы так будете долго рассуждать если знаете как сделать скажите, а то воду в ступе толчете..


Fay   (2005-06-03 17:52:00) [20]

Это развод, либо Орешник снова переехал в Основную.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо