Текущий архив: 2006.10.15;
Скачать: CL | DM;
ВнизКопирование тектса из одного TRichEdit-а в другой Найти похожие ветки
← →
darlock (2006-09-13 18:53) [0]Всем привет.
У меня есть два TRichEdit-а - допустим заголовок (пару страниц - не меняющихся) и тело (остальной документ)- я хочу их вывести в одном - так что бы получился документ целиком. Как это сделать в Делфи, сохранив при этом все форматирование и шрифты.
Спасибо
← →
Anatoly Podgoretsky © (2006-09-13 19:48) [1]1. RichEdit2.Text2 := RichEdit1.Text
2. RichEdit2.Text2 := RichEdit2.Text2 + RichEdit1.Text
← →
darlock (2006-09-14 12:51) [2]Хммм, это шутка или я плохо объяснил что у меня не получилось? :)
Насколько мне известно копирование таким образом копирует только текст. Попробую спросить по другому :) - если у меня есть два различных RTF документа (в каждом документе используется по несколько разных шрифтов, различные абзацы, нумерация пунктов и т.д), открытых в двух разных TRichEdit-ах, и я бы хотел эти документы объединить в один - в третий (RichEdit3) - так что бы их шрифты, цвета, нумерация, абзацы и т.д сохранились - т.е. получить 3ий документ состоящий из этих двух.
Спасибо.
← →
MBo © (2006-09-14 13:26) [3]использовать сообщения EM_STREAMIN/EM_STREAMOUT
← →
darlock (2006-09-14 17:35) [4]Спасибо, пошел рыть в этом направлнии
П.С. Имхо ответ несколько не для новичка или уровень навичков сильно подрос за последнее время :)
← →
MBo © (2006-09-14 17:51) [5]Свой пример не нашел, вот от Калверта (не проверял)
{--------------------------------------}
{-- RichEdit Code ---------------------}
{--------------------------------------}
uses RichEdit;
Type
TEditStreamCallBack = function (dwCookie : DWORD; buf : PChar;
bytestoread : LongInt; var bytesread : LongInt): DWORD; stdcall;
TEditStream = record
dwCookie: Longint;
dwError: Longint;
pfnCallback: TEditStreamCallBack;
end;
StreamOps = (readop, writeop);
TRTFCookieData = {my data record} record
streamop : readop..writeop;
opstream : TStream;
end;
PRTFData = ^TRTFCookieData;
{$R *.DFM}
function EditStreamCallBack(dwCookie : DWORD; buf : PChar;
bytestoread : LongInt; var bytesread : LongInt): DWORD; stdcall;
var
astream : TStream;
RTFData : PRTFData;
begin
RTFData := PRTFData(dwCookie);
astream := RTFData.opstream;
result := S_OK;
bytesread := 0;
try
if RTFData.streamop = readop then
bytesread := astream.Read(buf^, bytestoread)
else
bytesread := astream.Write(buf^, bytestoread);
showmessage(inttostr(bytesread));
except
result := E_FAIL;
end;
end;
procedure RTF_To_Stream(RE : TRichEdit; astream : TStream);
var
CookieData : TRTFCookieData;
EditStream : TEditStream;
begin
CookieData.streamop := writeop;
CookieData.opstream := astream;
EditStream.dwCookie := DWORD(@CookieData);
EditStream.pfnCallback := EditStreamCallBack;
EditStream.dwError := S_OK;
SendMessage(RE.handle, EM_STREAMOUT, SF_RTF or SFF_SELECTION,
LongInt(@EditStream));
end;
procedure RTF_From_Stream(RE : TRichEdit; astream : TStream);
var
CookieData : TRTFCookieData;
EditStream : TEditStream;
begin
CookieData.streamop := readop;
CookieData.opstream := astream;
EditStream.dwCookie := DWORD(@CookieData);
EditStream.pfnCallback := EditStreamCallBack;
EditStream.dwError := S_OK;
SendMessage(RE.handle, EM_STREAMIN, SF_RTF or SFF_SELECTION,
LongInt(@EditStream));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ss : TStringStream;
begin
ss := TStringStream.Create("");
try
RTF_To_Stream(RichEdit1, ss);
ss.position := 0;
RTF_From_Stream(RichEdit3, ss);
finally
ss.free;
end;
end;
← →
MBo © (2006-09-14 17:52) [6]P.S.
Возможно, пример очень старый, и некоторые объявления уже лишние
← →
Anatoly Podgoretsky © (2006-09-14 19:32) [7]darlock (14.09.06 17:35) [4]
Возможно, но и вопрос не для новичка, но раз ты его задаешь, то значит предполагаешь, что сумеешь понять, для такого сложного вопроса.
← →
dansel (2006-09-20 18:25) [8]При таком подходе можно скопировать один RE в другой (AFAIK). Как скопировать два в один?
← →
dansel (2006-09-20 18:25) [9]При таком подходе можно скопировать один RE в другой (AFAIK). Как скопировать два в один?
← →
ффф (2006-09-27 18:04) [10]ф
Страницы: 1 вся ветка
Текущий архив: 2006.10.15;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.041 c