Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.04 c
15-1159286396
Михель
2006-09-26 19:59
2006.10.15
А как делаются отправлялки смсок, кто-нибудь знает?


2-1159158945
Gool
2006-09-25 08:35
2006.10.15
Панель в IE


2-1159455702
Matri}{
2006-09-28 19:01
2006.10.15
Матрица


2-1159181228
iamDANIL 2006
2006-09-25 14:47
2006.10.15
кнопки со своим оформлением


2-1159357517
Anto}{a
2006-09-27 15:45
2006.10.15
delphi не находит нужного поля