Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

RTF и буфер обмена   Найти похожие ветки 

 
Lexandr   (2004-05-27 12:24) [0]

Ребята, есть такой компонент TRichEdit, я его использую для того чтобы загружать RTF файлы. У меня два компонента - в одном полный текст, а во-втором я из первого должен ПРОГРАММНО скопировать определенный фрагмент документа (с форматированием). Ничего кроме, как через буфер я не нашел. Но проблема в том что под ХР буфер ИНОГДА с этим компонентом (или вообще) парится и не хочет программно ничего копировать. И что примечательно все начинает работать через час-пол работы с ХР или там с Word-ом (я так подозреваю что это из-за того, что буфер может хранить несколько объектов или еще что-то, незнаю)
Посоветуйте что-нибудь: 1) может какой другой компонент есть для RTF 2) или както можно скопировать часть документа через переменные, а не через буфер 3) или еще что-то
Мастера, помогите решить проблему, одна надежда на Вас


 
Lexandr   (2004-05-27 16:39) [1]

Ребята!!! Ну помогите же кто нибудь!!! Неужели эта проблема не решаемая!


 
Lexandr   (2004-05-27 20:06) [2]

Хотябы подскажите где взять работающий компонент TX TEXT CONTROL

Пожалуйста!!!


 
MetalFan   (2004-05-27 21:26) [3]

есть у меня две процедурки копирования через потоки)))

unit uRicheditCopy;

interface

uses StdCtrls, ComCtrls, Classes, Richedit, windows;

function RichCopyToStream(ARich : TRichEdit) : TStream;
function RichPasteFromStream(ARich : TRichEdit; aStream : TStream) : boolean;

implementation

function AnEditCopyStreamCallBack(dwCookie : longint; pbBuff : PByte;
 cb : longint; var pcb : longint) : longint; stdcall;
var
 lStrm : TStream;
begin
 lStrm := TStream(dwCookie);
 if cb > 0 then
 begin
   pcb := lStrm.Write(pbBuff^, cb);
   Result := 0;
 end;
end;

function RichCopyToStream(ARich : TRichEdit) : TStream;
var
 lEditStream : EDITSTREAM;
 lWParam : integer;
begin
 Result := TMemoryStream.Create;
 zeroMemory(@lEditStream, SizeOf(EDITSTREAM));
 lEditStream.pfnCallback := AnEditCopyStreamCallBack;
 lEditStream.dwCookie := longint(Result);
 lWParam := SF_RTF or SFF_SELECTION;
 ARich.Perform(EM_STREAMOUT, lWParam, longint(@lEditStream));
end;

function AnEditPasteStreamCallBack(dwCookie : longint; pbBuff : PByte;
 cb : longint; var pcb : longint) : longint; stdcall;
var
 theStream : TStream;
 dataAvail : longint;
begin
 theStream := TStream(dwCookie);
 with theStream do
 begin
   dataAvail := Size - Position;
   Result := 0; {assume everything is ok}
   if dataAvail <= cb then
   begin
     pcb := Read(pbBuff^, dataAvail);
     if pcb <> dataAvail then {couldn"t read req. amount of bytes}
       Result := E_FAIL;
   end
   else
   begin
     pcb := Read(pbBuff^, cb);
     if pcb <> cb then
       Result := E_FAIL;
   end;
 end;
end;

function RichPasteFromStream(ARich : TRichEdit; aStream : TStream) : boolean;
var
 lEditStream : EDITSTREAM;
 lWParam : integer;
begin
 zeroMemory(@lEditStream, SizeOf(EDITSTREAM));
 aStream.Seek(0,0);
 lEditStream.pfnCallback := AnEditPasteStreamCallBack;
 lEditStream.dwCookie := longint(aStream);
 lWParam := SF_RTF or SFF_SELECTION;
 Result := ARich.Perform(EM_STREAMIN, lWParam, longint(@lEditStream)) = 0;
end;
end.

можеть не совсем красиво, но работает!
только текст копируется выделенный... хотя можно копировать и весь)
удачи!


 
Lexandr   (2004-05-28 11:29) [4]

Большое-прибольшое человеческое СПАСИБО!!!


 
MetalFan ©   (2004-05-28 11:38) [5]

на здоровье)
сам был очень рад, когда додумался)
и мастерам спасибо - они мне такую фишку подсказали!



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
1-1085746601
nitrino
2004-05-28 16:16
2004.06.13
Как достать WideString из DLL


3-1085136665
Artem03
2004-05-21 14:51
2004.06.13
Обращение к 2 БД в одном запросе


6-1082612763
Ozone
2004-04-22 09:46
2004.06.13
TIdTcpServer


14-1085668642
Соловьев
2004-05-27 18:37
2004.06.13
http://www.es.oersted.dtu.dk/~bt/schedule/schedule.html


3-1085408899
DimonNew
2004-05-24 18:28
2004.06.13
BGrid с флажком