Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Посылка форматированного текста, Как послать форматированный текст? 
:(
    Опции темы
Joni Qwest
Дата 26.7.2004, 16:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем специалистам!
Столкнулся с такой проблемой. Я делаю мессенджер для локалки и тут мои пользователи захотели, что бы можно было посылать форматированный текст.
Ну то есть с изменённым шрифтом, цветом, размером и т.д. Как это сделать?
Для ввода текста использую RxRichEdit а для посылки обычный TServerSocket и TClientSocket.
Пользователи моей сети (61 человек) будут очень рады, если вы подробно ответите на этот вопрос.
Спасибо.
  Вверх
Kesh
Дата 26.7.2004, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



А почему бы не использовать HTML - мне кажется реализация этого не так уж трудна...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Joni Qwest
Дата 26.7.2004, 21:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как мне послать rtf исходный текст? Как его из RxRichEdit выловить?
  Вверх
p0s0l
Дата 27.7.2004, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Можно так попробовать: выделяй нужный кусок текста, копируй в буфер обмена (RichEdit1.CopyToClipboard), потом достань из буфера обмена то что там есть и пошли по сетке, там принимай, засовывай в буфер и вставляй в текст (RichEdit1.PasteFromClipboard)...
Звучит сложно, но в DRKB есть код для чтения и записи содержимого Clipboard, а там останется только послать по сетке - это тоже вопрос часто задаваемый, так что остаётся собрать воедино несколько готовых кусков кода...
Главное тут то, что в clipboard текст копируется форматированный...


Добавлено @ 14:11
А вот впрочем и примеры чтения и записи буфера обмена:
Код

// пишет в файл "e:\cp.dat" из clipboard

procedure TForm1.BSaveClick(Sender: TObject);
var CBF:Cardinal;
CBFList:TList;  
i:Integer;  
h:THandle;  
p:Pointer;  
CBBlockLength,Temp:Cardinal;  
FS:TFileStream;  
 
begin
if OpenClipBoard(0)then begin  
CBFList:=TList.Create;  
CBF:=0;  
repeat  
CBF:=EnumClipboardFormats(CBF);  
if CBF<>0 then  
CBFList.Add(pointer(CBF));  
until CBF=0;  
edit1.text:=IntToStr(CBFList.Count);  
if CBFList.Count>0 then begin  
FS:=TFileStream.Create('e:\cp.dat',fmCreate);  
Temp:=CBFList.Count;  
FS.Write(Temp,SizeOf(Integer));  
for i:=0 to CBFList.Count-1 do begin  
h:=GetClipboardData(Cardinal(CBFList[i]));  
if h>0 then begin  
CBBlockLength:=GlobalSize(h);  
if h>0 then begin  
p:=GlobalLock(h);  
if p <> nil then begin  
Temp:=Cardinal(CBFList[i]);  
FS.Write(Temp,SizeOf(Cardinal));  
FS.Write(CBBlockLength,SizeOf(Cardinal));  
FS.Write(p^,CBBlockLength);  
end;  
GlobalUnlock(h);  
end;  
end;  
end;  
FS.Free;  
end;  
CBFList.Free;  
CloseClipBoard;  
 end;
end;

// читает из файла "e:\cp.dat" в clipboard

procedure TForm1.bLoadClick(Sender: TObject);
var h:THandle;
p:Pointer;  
CBF:Cardinal;  
CBBlockLength:Cardinal;  
i,CBCount:Integer;  
FS:TFileStream;  

begin
if OpenClipBoard(0)then begin  
FS:=TFileStream.Create('e:\cp.dat',fmOpenRead);  
if FS.Size=0 then Exit;  
FS.Read(CBCount,sizeOf(Integer));  
if CBCount=0 then Exit;  
for i:=1 to CBCount do begin  
FS.Read(CBF,SizeOf(Cardinal));  
FS.Read(CBBlockLength,SizeOf(Cardinal));  
h:=GlobalAlloc(GMEM_MOVEABLE or GMEM_SHARE or GMEM_ZEROINIT,CBBlockLength);  
if h>0 then begin  
p:=GlobalLock(h);  
if p=nil then  
GlobalFree(h)  
else begin  
FS.Read(p^,CBBlockLength);  
GlobalUnlock(h);  
SetClipboardData(CBF,h);  
end;  
end;  
end;  
FS.Free;  
CloseClipBoard;  
end;  
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
Sunvas
Дата 19.7.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Joni Qwest @  26.7.2004,  21:12 Найти цитируемый пост)
А как мне послать rtf исходный текст? Как его из RxRichEdit выловить?

Сохранить в Tmemorystream и послать. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Snowy
Дата 20.7.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Sunvas, прекращай заниматься некрофилией. 
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.