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

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

Как в RichEdit открыть текст, сохранённый в формате Doc?


Zagaevskiy ©   (2007-05-25 18:47:00) 

LoadFromFile - нет  читает только rtf


JanMihail   (2007-05-25 21:41:00) [1]

Если строку заменишь на эту:
Wrd.ActiveDocument.SaveAs('C:\1.rtf', 6);
То и форматирование сохранится


JanMihail   (2007-05-25 21:15:00) [2]

Вот так 100% работает, но это только если есть Word на компе
var
 Wrd: OleVariant;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
 Wrd := CreateOleObject('Word.Application');
 Wrd.Documents.Open('c:\1.doc');
 Wrd.ActiveDocument.SaveAs('C:\1.rtf', 2);
 Wrd.Quit;
 sleep(1000);
 RichEdit1.Lines.LoadFromFile('C:\1.rtf');
end;


Johnmen   (2007-05-25 21:05:00) [3]


> LoadFromFile - нет  читает только rtf

Да-дад. Это непорядок! Он обязан читать не только doc, но и rar, и avi, и flv!


JanMihail   (2007-05-25 20:05:00) [4]

Exe-шник лежит здесь:
http://JanMihailPrograms.narod.ru/RichEdit.rar

unit code;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus, ComCtrls;

type
 TForm1 = class(TForm)
   OpenDialog1: TOpenDialog;
   MainMenu1: TMainMenu;
   Memo1: TMemo;
   Filemenu1: TMenuItem;
   Open1: TMenuItem;
   Unicode1: TMenuItem;
   procedure Open1Click(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure Memo1Change(Sender: TObject);
   procedure Memo1Click(Sender: TObject);
   procedure Unicode1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 ff,fo:file;
 xs,xofs:byte;
 xw:word;
 xz,i:integer;
 st:string;

implementation

{$R *.dfm}

procedure TForm1.Open1Click(Sender: TObject);
begin
 If OpenDialog1.Execute then
 begin
    assignfile(ff,OpenDialog1.FileName); {îòêðâàåì èñõîäíûé ôàéë}
    reset(ff,2); {äëÿ ÷òåíèÿ äâóõáàéòíûìè ñëîâàìè}
    xz:=filesize(ff); {ðàçìåð ôàéëà â äâóõáàéòíûõ ñëîâàõ}
    st:=OpenDialog1.FileName; {ïðåîáðàçóåì íàçâàíèå}
    delete(st,length(st)-2,3);
    st:=st+'txt';
    assignfile(fo,st); {ñîçäàåì txt}
    rewrite (fo,1);
    st:=''; {ñòðîêà ïîíàäîáèòñÿ äëÿ âûâîäà â Memo}
    for i:=1 to xz do
    begin
         blockread(ff,xw,1); {÷èòàåì ñëîâî}
         xofs:=hi(xw); {äåëèì åãî íà áàéòû}
         xs:=lo(xw);
         if (xofs=0) then {íàø àëãîðèòì}
         begin
           if (xs0) then
           begin
             blockwrite(fo,xs,1);
             if xs=13 then
             begin
               Memo1.Lines.Add(st); {âûâîäèì â Memo êàæäóþ ñòðîêó}
               st:='';
             end
             else st:=st+chr(xs); {äîïîëíÿåì ñòðîêó}
           end;
         end else
         if (xofs=4) then
         begin
         if xs0 then
         begin
              xs:=xs+176;
              blockwrite(fo,xs,1);
              st:=st+chr(xs);
         end;
         end else
         begin
           blockwrite(fo,xs,1); {åñëè íå 0 è íå 4 - ïèøåì âñå}
           blockwrite(fo,xofs,1); {â ôàéë, íî íå â ñòðîêó}
         end;
    end;
    closefile(ff);
    closefile(fo);
    Memo1.SelStart:=Memo1.Perform(EM_LINEINDEX,1,0)+1;
    Memo1.Perform(EM_SCROLLCARET,0,0);
    Memo1.SetFocus;
 end;
end; {Open}

procedure TForm1.FormPaint(Sender: TObject);
begin
    HideCaret(Memo1.Handle); {ñêðûâàåì êóðñîð}
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
    HideCaret(Memo1.Handle); {ñêðûâàåì êóðñîð}
end;

procedure TForm1.Memo1Click(Sender: TObject);
begin
    HideCaret(Memo1.Handle); {ñêðûâàåì êóðñîð}
end;

procedure TForm1.Unicode1Click(Sender: TObject);
var wch:WideChar;
   wst:WideString;
begin
 If OpenDialog1.Execute then
 begin
    Memo1.Lines.Clear;
    wst:='';
    assignfile(ff,OpenDialog1.FileName); {îòêðâàåì èñõîäíûé ôàéë}
    reset(ff,sizeof(wch)); {äëÿ ÷òåíèÿ äâóõáàéòíûìè ñèìâîëàìè}
    xz:=filesize(ff); {ðàçìåð ôàéëà â ñèìâîëàõ}
    for i:=1 to xz do
    begin
      try
        blockread(ff,wch,1);
      except
        continue;
      end;
        if wch>#31 then wst:=wst+wch else
        if wch=#13 then
        begin
          st:=wst;
          Memo1.Lines.Add(st); {âûâîäèì â Memo êàæäóþ ñòðîêó}
        end;
    end;
    closefile(ff);
 end;
end;

end.


Desdechado   (2007-05-25 19:36:00) [5]

> JanMihail ©   (25.05.07 19:04) [2]
Word есть далеко не у всех.


JanMihail   (2007-05-25 19:04:00) [6]

Очень просто. Делай так и читай как rtf:


var
 Wrd: OleVariant;
...

procedure TForm1.Button1Click(Sender: TObject);
begin
 Wrd := CreateOleObject('Word.Application');
 Wrd.Documents.Open('C:\1.doc');
 Wrd.ActiveDocument.SaveAs('c:\1.rtf');
 Wrd.Quit;
end;

Нашел что спрашивать. Сам бы хоть попробовал. На своих ошибках учись


Desdechado   (2007-05-25 19:02:00) [7]

Так и должно быть. Т.к. RTF = RichText Format, и RichEdit - его родной.


Наверх

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