![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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