Page 1 of 1

How to add doc and docx support in ActionTest ribbon demo?

Posted: Mon Dec 10, 2012 3:54 am
by MoonDevilzzz
How to add doc and docx support in ActionTest ribbon demo?How can i spread the filter? :(

Posted: Mon Dec 10, 2012 7:51 pm
by Sergey Tkachenko
The instructions are below. I tested it on the normal ActionTest demo, but the same code must work for the Ribbon version. The only difference: actions are located on the form, not on rvActionsResource.

Options for opening DOC and/or DOCX files appears in the open and save dialogs only if the corresponding converters are installed on the computer.

1) Place rvc: TRVOfficeConverter on the form.
2) Add to the form declaration:

Code: Select all

DocConverters, DocXConverters: Boolean;
3) Add the form method InitDocFilters:

Code: Select all

function FindConverter(Converters: TRVOfficeCnvList; const Filter, DLL: String): Integer;
var i: Integer;
begin
  Result := -1;
  for i := 0 to Converters.Count-1 do
    if (Filter = AnsiLowerCase(Converters[i].Filter)) and
       (AnsiPos(DLL, AnsiLowerCase(Converters[i].Path))>0) then begin
      Result := i;
      exit;
    end;
end;

const CNVDLL = 'wordcnvpxy.cnv';

procedure TForm3.InitDocFilters;
begin
  DocConverters :=
    (FindConverter(rvc.ImportConverters, '*.doc', CNVDLL)>=0) and
    (FindConverter(rvc.ExportConverters, '*.doc', CNVDLL)>=0);
  DocXConverters :=
    (FindConverter(rvc.ImportConverters, '*.docx', CNVDLL)>=0) and
    (FindConverter(rvc.ExportConverters, '*.docx', CNVDLL)>=0);
  if DocConverters then
    rvActionsResource.rvActionOpen1.CustomFilter :=  'Microsoft Word 97-2003 Document|*.doc';
  if DocXConverters then begin
    if DocConverters then
      rvActionsResource.rvActionOpen1.CustomFilter :=
        rvActionsResource.rvActionOpen1.CustomFilter+'|';
    rvActionsResource.rvActionOpen1.CustomFilter :=
      rvActionsResource.rvActionOpen1.CustomFilter+'Microsoft Word 2007+ Document|*.docx';
  end;
  rvActionsResource.rvActionSaveAs1.CustomFilter := rvActionsResource.rvActionOpen1.CustomFilter;
end;
4) Call this InitDocFilters in FormCreate.
5) Process RVAControlPanel1.OnCustomFileOperation:

Code: Select all

procedure TForm3.RVAControlPanel1CustomFileOperation(Sender: TrvAction;
  Edit: TCustomRichViewEdit; const FileName: string;
  Operation: TRVAFileOperation; var SaveFormat: TrvFileSaveFilter;
  var CustomFilterIndex: Integer; var Success: Boolean);
var Ext: String;
    Index: Integer;
begin
  Success := False;
  Ext := '';
  case CustomFilterIndex of
    1:
      if DocConverters then
        Ext := '*.doc'
      else if DocXConverters then
        Ext := '*.docx';
    2:
      if DocConverters and DocXConverters then
        Ext := '*.docx';
  end;
  if Ext='' then
    exit;
  case Operation of
    rvafoOpen:
      Success := rvc.ImportRV(FileName, Edit, FindConverter(rvc.ImportConverters, Ext, CNVDLL));
    rvafoSave:
      Success := rvc.ExportRV(FileName, Edit, FindConverter(rvc.ExportConverters, Ext, CNVDLL));
  end;
end;

Posted: Mon Dec 10, 2012 7:58 pm
by Sergey Tkachenko
Notes:

1) I tested on a computer with MS Word 2007 installed. Probably, if doc-converters are installed with older versions of MS Word, the converter DLL has a different name, not wordcnvpxy.cnv.

2) The quality of importing doc/docx is worse than if you save a file in MS Word as rtf and then open this rtf. The same for exporting. Unfortunately, converters do their work not as good as MS Word itself.

3) Converters can open/save files with names that can be converted to DOS (OEM) charset. They fail opening files having Unicode characters. To solve this problem, you can either use GetShortPathName, or create a temporal copy of the file to open/save with a simple name.

4) If MS Office is not installed, DOCX converter can be downloaded here: http://www.microsoft.com/en-us/download ... .aspx?id=3

Posted: Tue Dec 11, 2012 7:24 am
by MoonDevilzzz
Thanks a lot!Working perfect :)