Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 19:32   #1
norfonzor
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 20
По умолчанию Загрузка в делфи MS Word

Пишу учебник, необходимо загружать документы ms word с возможностью редактирования. Перерыл весь интернет ничего найти не могу. Помогите!
norfonzor вне форума Ответить с цитированием
Старый 03.05.2010, 19:44   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Тырк, тырк, тырк
W0LF вне форума Ответить с цитированием
Старый 03.05.2010, 19:59   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Интересует обработка doc-файлов в программе ?
Или просто работа с Word`ом из Delphi ?

Если первое - то компоненты RichView, а точнее SRichViewEdit из их состава, там есть демка OfficeConverters и ActionTest - как раз с конвертером doc-файлов.
Если второе - то поста №2 совет W0LF

Add
Демку приложил. Компоненты тут не дам - ибо нельзя. Есть соответствующий раздел форума.
Вложения
Тип файла: rar OfficeConverters.rar (806.2 Кб, 146 просмотров)
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 03.05.2010 в 20:13.
Kotofff вне форума Ответить с цитированием
Старый 03.05.2010, 21:04   #4
norfonzor
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 20
По умолчанию

совет от WOLF у меня не работает я давно это уже проверял, при импорте пишет ошибку при компиляции
(http://pixs.ru/showimage/WWJPG_6066473_601246.jpg)

ммм а что значит обработка?
мне необходимо чтобы делфи отображал word документ в таком же виде в котором это делает MS word

точнее:
захожу в программу в режим редактирования, далее создаю в оглавлении строку "Статья 1" далее указываю документ "статья1.doc" (в котором текст этой статьи) сохраняю и выхожу их режима редактирования.

Пользователь нажимая на "Статья 1" должен увидеть в окне справа текст из "статья1.doc".

Сейчас программа загружает HTML но это не удобно преподавателю, тк у него все в ворде.

ссылка на программу: http://depositfiles.com/files/zjfswxixd

SRichViewEdit думаю подойдет. Есть какой то хелп по нему? можешь скинуть ссылку в личку на исходники "OfficeConverters.rar" и компоненты ?

не могу установить RichViewEdit при компиляции выдает кучу всяких ошибок, ничего не получается. ПОМОГИТЕ!!!!

ПОМОГИТЕ!!!

Последний раз редактировалось Stilet; 11.05.2010 в 15:06.
norfonzor вне форума Ответить с цитированием
Старый 06.05.2010, 15:14   #5
norfonzor
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 20
По умолчанию

Kotofff, вопрос как спецу по RichView,
Задача:
Пользователь в ходе настройки программы (в режиме редактирования) выбирает .doc, .docx документы и привязывает их к оглавлению, адрес документа сохраняется в массив (of string)
после в режиме просмотра при нажатии на оглавление программа должна загружать документ по адресу из массива. а в примере как то намудренно сделано, что открывается openDialog при загрузке (мне его не надо, адрес документа в массиве лежит) я не могу понять как это работает.

проблема в следующем:
подскажите мне процедуру по загрузке документа word в форму RichViewEdit зная адрес документа

procedure OpenWord(f:string);
var r: Boolean;
begin
???
end;


Все разобрался: z- имя документа в папке LIB, index- номер расширения документа (номер из openDialog (1..11) сохраняются при выборе док-а из opendialog)

Код:
procedure OpenWord(z:string; index:integer);
var r: Boolean;
FileName,st:string;
begin
  FrmMain.rve.Clear;
  FrmMain.rve.Format;
  FrmMain.rve.Update;
  FrmMain.rve.Clear;

FileName:= ExtractFilePath(Application.Exename)+'LIB\'+z;          
  if Index=1 then
    r := FrmMain.rve.LoadRTF(Pchar(FileName))
  else begin
    FrmMain.pb.Visible := True;
    r:= FrmMain.rvc.ImportRV(Pchar(FileName), FrmMain.rve, Index-2);
  end;
  if not r then
    Application.MessageBox('Error','Error',0);
  FrmMain.pb.Visible := False;
  FrmMain.rve.Format;
  FrmMain.rve.SetFocus;
end;

Последний раз редактировалось Stilet; 11.05.2010 в 15:07.
norfonzor вне форума Ответить с цитированием
Старый 11.05.2010, 14:28   #6
norfonzor
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 20
По умолчанию

ОГРОМНЫЙ вопрос про RichView.

Почему RichView работает только на том ПК на котором была создана программа?? на других выдается сообщение об ошибке загрузки (Error).
текст всего что связано с RichView:

Код:
procedure TfrmMain.FormCreate(Sender: TObject);
var bmp: TBitmap;
begin
  VT.NodeDataSize := SizeOf(TPhoneNode);
  //загрузка оглавления
  Loadglav.Click;

  begin
  OpenDialog.Filter := 'RTF (Импорт документа)|*.rtf|'+rvc.GetImportFilter;
  sd.Filter := 'RTF (Экспорт документа)|*.rtf|'+rvc.GetExportFilter;

  rve.Clear ;
  rve.AddNL('',0,1);

  bmp := TBitmap.Create;
  bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'IMG\Copyright.bmp');
  Rve.AddPictureEx('', bmp, -1, rvvaMiddle);
  rve.Format;
end;

//Указать документ
procedure TfrmMain.add_docClick(Sender: TObject);
var FName,n: string;
NewPhone: PPhoneNode;
f:TextFile;

begin
if OpenDialog.Execute then
 begin

//открытие data1
AssignFile(f,ExtractFilePath(Application.Exename)+'data1.txt');
{$I-}Reset(f);{$I+}
if IOResult<>0 then
begin
 rewrite(f);
 write(f,0);
end;
CloseFile(f);

Reset(f);
read(f,n);
n:=inttostr(strtoint(n)+1);
CloseFile(f);

FName := OpenDialog.FileName;

  //showmessage('filename='+ExtractFilePath(Application.Exename)+'LIB\'+n+ExtractFileExt(FName));
  CopyFile(Pchar(FName),
  Pchar( ExtractFilePath(Application.Exename)+'LIB\'+n+ExtractFileExt(FName) ),true);

rewrite(f);
write(f,n);
CloseFile(f);

  NewPhone := VT.GetNodeData(VT.FocusedNode);
  if Assigned(NewPhone) then
    with NewPhone^ do
    begin
      name:=ExtractFileName(Fname);
      doc:=n+ExtractFileExt(FName);
      index:=OpenDialog.FilterIndex;
    end;

 end;


 //showmessage('указан');
end;

procedure OpenWord(z:string; index:integer);
var r: Boolean;
FileName,st:string;
begin
  FrmMain.rve.Clear;
  FrmMain.rve.Format;
  FrmMain.rve.Update;
  FrmMain.rve.Clear;

FileName:= ExtractFilePath(Application.Exename)+'LIB\'+z;          //ExtractFileName(z)+ExtractFileExt(z);
//showmessage('открываю"'+FileName+'", index='+inttostr(index));
  if Index=1 then
    r := FrmMain.rve.LoadRTF(Pchar(FileName))
  else begin
    FrmMain.pb.Visible := True;
    r:= FrmMain.rvc.ImportRV(Pchar(FileName), FrmMain.rve, Index-2);
  end;
  if not r then
    Application.MessageBox('Error','Error',0);
  FrmMain.pb.Visible := False;
  FrmMain.rve.Format;
  FrmMain.rve.SetFocus;
end;



procedure TfrmMain.VTColumnClick(Sender: TBaseVirtualTree;
  Column: TColumnIndex; Shift: TShiftState);
var

  NewPhone: PPhoneNode;
  z:string;
  index:integer;
begin

  NewPhone := VT.GetNodeData(VT.FocusedNode);
  if Assigned(NewPhone) then
  begin
  z:=NewPhone^.doc;
  index:=NewPhone^.index;
  end;

   if z<>'' then
   //загрузка документа
   begin
    OpenWord(z,index);
   end;

end;

Последний раз редактировалось Stilet; 11.05.2010 в 15:08.
norfonzor вне форума Ответить с цитированием
Старый 11.05.2010, 15:27   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

с путями к файлам все нормально ?
точки останова F5 расставь - посмотри содержимое переменных ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 11.05.2010, 16:45   #8
norfonzor
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 20
По умолчанию

да пути нормальные, выводил путь и индекс через showmessage.
Дело в каких то данных которые я видимо не сохранил.
сохраняю путь и index(с opendialog формат документа doc, docx, html итд)

чтобы загрузить в RichView документ, кроме 2х этих параметром что то еще необходимо знать?

Нашел причину, не совпадают индексы. opendialog и сохраняется автоматически в строке: "index:=OpenDialog.FilterIndex; "
opendialog считывает их из RichView. а RichView меняет их порядок на разных компах, видимо в зависимости от версий ворда. как то можно зафиксировать список. или распознать формат документа не задевая open dialog, к примеру зная только адрес документа(filename). к примеру расширение я могу получить через ExtractFileExt(filename)
В команду открытия необходимо указать индекс документа:
FrmMain.rvc.ImportRV(Pchar(FileName ), FrmMain.rve, Index-2);

я знаю что индексы можно получить через rvc.GetImportFilter:
OpenDialog.Filter := 'RTF (Импорт документа)|*.rtf|'+rvc.GetImportFil ter;

Мне посоветовали конвертировать Word в веб-страницу (в формате .mht) мб кто-нибудь знает как это сделать программно?

Мне необходимо сделать чтобы пользователь ткнул пальцем на MS Office и все работало.
Отрыл код для конвента в .mht усе работает прекрасно и быстро без глюков.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj, ActiveX, WordXP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  WordApp: OleVariant;
begin

WordApp:=CreateOleObject('Word.Application');
  try
WordApp.Visible:=False;
WordApp.DisplayAlerts:=False;

WordApp.Documents.Open('C:\123.doc', ReadOnly:=True);
WordApp.ActiveDocument.SaveAs('C:\123.mht', wdFormatWebArchive);
  finally
WordApp.Quit;
WordApp:=Unassigned;
  end;

end;


end.
и открываю в браузере
Код:
WB.Navigate(z);

Последний раз редактировалось mihali4; 15.05.2010 в 10:56.
norfonzor вне форума Ответить с цитированием
Старый 15.05.2010, 01:34   #9
kazbek_mib
Новичок
Джуниор
 
Регистрация: 15.05.2010
Сообщений: 4
По умолчанию Если ты про то что я думаю....то вот...кусок

в uses добавь ComObj
................................... .. var WordApp,Doc:variant;
try
WordApp:=CreateOleObject('Word.Appl ication');
except showmessage('Не установлен Microsoft Word'); exit;
end;
WordApp.Visible:=true;
Doc:=WordApp.Documents.add;
WordApp.Selection.TypeText(smemo1.t ext);
WordApp.ChangeFileOpenDirectory(Get CurrentDir+'\lection\');
WordApp.ActiveDocument.SaveAs(intto str(listbox1.Count)+'.mht');
если тебе нужно не это то извиняй!
............
проглядел....

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 15.05.2010 в 10:57. Причина: такой ответ уже есть!
kazbek_mib вне форума Ответить с цитированием
Старый 01.11.2014, 20:48   #10
ovpmusic
Новичок
Джуниор
 
Регистрация: 07.10.2014
Сообщений: 1
По умолчанию RVOfficeConverter

Цитата:
Сообщение от norfonzor Посмотреть сообщение
ОГРОМНЫЙ вопрос про RichView.

Почему RichView работает только на том ПК на котором была создана программа?? на других выдается сообщение об ошибке загрузки (Error).


Код:
....
    r:= FrmMain.rvc.ImportRV(Pchar(FileName), FrmMain.rve, Index-2);
Вместо Index-2 попробуйте: rvc.ImportConverters.Count-3
Должно заработать на любом компьютере. ImportConverters - берет информацию из реестра в зависимости от конфигурации и установленных программ.
ovpmusic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка MS Word в делфи norfonzor Общие вопросы Delphi 1 28.04.2010 18:20
Автозаполнение документа Word из Делфи Fantss Помощь студентам 3 23.03.2010 15:39
[Делфи] Загрузка смайлов Lemo Помощь студентам 6 21.11.2009 17:46
Загрузка из файла (консольный режим Делфи) adwaer Помощь студентам 3 30.06.2008 15:55