Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Копирование тектса из одного 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
4-1148916035
Fluffy
2006-05-29 19:20
2006.10.15
Как получить список событий?


2-1159342059
AdminSKBZ
2006-09-27 11:27
2006.10.15
MDI - сохранение и востановления


15-1159197705
Konstantin555
2006-09-25 19:21
2006.10.15
Как в Microsoft Excel записать ячейку-константу?


2-1159271382
Андрей Иванов
2006-09-26 15:49
2006.10.15
базы данных


2-1159288225
Хм...
2006-09-26 20:30
2006.10.15
Клиент для онлайн-игрушки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский