Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Word и RichEdit [D7, XP]


Juri ©   (2006-10-04 15:19:00) 

доброго времени суток! Подскажиет пожалуйста как мне из документа Microsoft Word текст поместить в RichEdit со всеми форматами тексат?


Ketmar   (2006-10-05 16:43:00) [1]

>[19] КотКамышевый 5-Oct-2006, 16:28
>коряво
не то слово. %-))


КотКамышевый   (2006-10-05 16:28:00) [2]

коряво, но работает. Проверки ошибок опущены для простоты

const
 ParaTag = '\par';
var
 hFile1, hFile2, hFile3: Cardinal;
 dwSize1, dwSize2, i, dwBytes: Cardinal;
 Buf1, Buf2, P: PByte;
begin
 RichEdit1.Lines.SaveToFile('f:\rtf1.rtf');
 RichEdit2.Lines.SaveToFile('f:\rtf2.rtf');
 hFile1 := CreateFile('f:\rtf1.rtf', GENERIC_READ, 0, nil, OPEN_EXISTING,
   0, 0);
 hFile2 := CreateFile('f:\rtf2.rtf', GENERIC_READ, 0, nil, OPEN_EXISTING,
   0, 0);
 dwSize1 := GetFileSize(hFile1, nil);
 dwSize2 := GetFileSize(hFile2, nil);
 Buf1 := AllocMem(dwSize1);
 Buf2 := AllocMem(dwSize2);
 ReadFile(hFile1, Buf1^, dwSize1, dwBytes, nil);
 ReadFile(hFile2, Buf2^, dwSize2, dwBytes, nil);
 CloseHandle(hFile1);
 CloseHandle(hFile2);
 P := Buf2;
 i := 0;
 while (i < dwSize2) do
 begin
   if CompareMem(P, @ParaTag[1], Length(ParaTag)) then
   begin

     hFile3 := CreateFile('f:\rtf3.rtf', GENERIC_READ or GENERIC_WRITE, 0, nil, CREATE_ALWAYS,
       0, 0);
     WriteFile(hFile3, Buf1^, dwSize1, dwBytes, nil);
     SetFilePointer(hFile3, -4, nil, FILE_CURRENT);
     WriteFile(hFile3, P^, dwSize2 - i, dwBytes, nil);
     CloseHandle(hFile3);
     break;
   end;
   Inc(P);
   Inc(i);
 end;
 FreeMem(Buf1);
 FreeMem(Buf2);
 RichEdit3.Lines.LoadFromFile('f:\rtf3.rtf');


Juri   (2006-10-05 14:27:00) [3]

альтернотива клипбоарду есть?


Ketmar   (2006-10-04 19:48:00) [4]

>[16] YurikGL(c) 4-Oct-2006, 19:41
>ClipBoard использовать плохо.... там у
>пользователя могло что то лежать.
а я не говорил "лучший". я сказал -- "простейший". а лежать там будет только до первого переноса. %-)


YurikGL   (2006-10-04 19:41:00) [5]


> баян. через clipboard, например. %-)

ClipBoard использовать плохо.... там у пользователя могло что то лежать.


Ketmar   (2006-10-04 19:10:00) [6]

>[14] Juri 4-Oct-2006, 19:05
>перекидывании формат текста теряется...
что вполне закономерно. %-) простейший -- через clipboard.


Juri   (2006-10-04 19:05:00) [7]

да не баян просто думал что можно наипростейшим способом перекинкть lines и всё но при таком перекидывании формат текста теряется...


Ketmar   (2006-10-04 17:55:00) [8]

баян. через clipboard, например. %-)


Juri   (2006-10-04 17:29:00) [9]

ещё такой вапрос как можно из двух ричедитов взять текст соединить и вставить в третий ричедит НО только формат текста должен сохранится....


umbra   (2006-10-04 16:42:00) [10]

вот примерно так. Только учтите, что если Вы хотите конвертировать массу документов, то лучше ворд создать один раз, и там конвертировать файлы.
uses ...., ComObj, Word97{или 2000, или xp}, ......

procedure SaveDocAsRTF(fulldocpath, fullrtfpath: string);
var
 WordApp, doc: Variant;
begin
 WordApp := Unassigned;
 doc := Unassigned;
 WordApp := CreateOLEObject('Word.Application');
 if not VarIsEmpty(WordApp) then
  try
    doc := WordApp.Open(Filename:=fulldocpath);
    doc := doc.SaveAs(FileFormat:=wdFormatRTF);
  finally
    if not VarIsEmpty(doc) then
      doc.Close;
    WordApp.Quit;
    doc := Unassigned;
    WordApp := Unassigned;
  end;
end;


Juri   (2006-10-04 16:37:00) [11]

спасиба


EvS   (2006-10-04 16:34:00) [12]

> что в юзес объявить?


ComObj, WordXP


Juri   (2006-10-04 16:34:00) [13]

нет не помогает


Ketmar   (2006-10-04 16:32:00) [14]

ActiveX?


Juri   (2006-10-04 16:27:00) [15]


> GetActiveOleObject

ругается...
что в юзес объявить?


EvS   (2006-10-04 16:21:00) [16]

 function ConvertDoc2Rtf(var FileName: string) : Boolean;
var
 oWord: OleVariant;
 oDoc: OleVariant;
begin
 Result := False;
 try
   oWord := GetActiveOleObject('Word.Application');
 except
   oWord := CreateOleObject('Word.Application');
 end;
 oWord.Documents.Open(FileName);
 oDoc  := oWord.ActiveDocument;
 FileName := ChangeFileExt(FileName, '.rtf');
 oDoc.SaveAs(FileName,wdFormatRTF);
 oWord.ActiveDocument.Close(EmptyParam, EmptyParam, EmptyParam);
 oWord.Quit(EmptyParam, EmptyParam, EmptyParam);
 oDoc := VarNull;
 oWord := VarNull;
 Result := True;
end;


Juri   (2006-10-04 16:07:00) [17]

а как же програмно сохранить ворд как ртф?


Juri   (2006-10-04 15:39:00) [18]

Спасибо огромное как я сам то не допендрил)))


umbra   (2006-10-04 15:34:00) [19]

сохранить документ в формате ртф и загрузить его в RichEdit


clickmaker   (2006-10-04 15:30:00) [20]

Word - Save as RTF - RE.Lines.LoadFromFile


Наверх

Титульная страница Поиск, карта сайта Написать письмо