Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2013年11月20日] [更新 2013年11月20日] ワード操作フォームEx
ワード操作フォームEx   参考コード類
ワード文書を EXE にリソースとして埋め込む
動作確認等 Windows 7 U64(SP1) + Delphi XE2 + Word 2010







実行ファイル EXE にワード文書を埋め込む


ワード操作フォームEx は,ひな型となる文書を元に文書を操作する目的で開発しました.
ひな型となる文書はユーザに変更されたくはありません.ユーザに元の文書を変更されないようにする 1 つの方法として,元の文書を EXE にリソースとして埋め込んでしまう方法があります.

EXE を作成する時には元の文書は必要ですが,配布するアプリケーションに元のワード文書を添付する必要はありません.
下図は,次のコードを書いた WordDocRes.rc というファイルをプロジェクトに追加し,コンパイルして作成した EXE を実行した結果です.フォームを表示する時に,リソースから埋め込んだワードの文書を読み出して AAA.doc という名前で保存しています.それを表示します.


DocumentA WORDDOC "文字列操作テスト文書.doc"


図1
起動時の画面
  • EXE に埋め込んだワード文書を表示
図2
一時的に作成されたワード文書
  • EXE を起動すると AAA.doc というワード文書が作成される
  • プログラムを終了する時に削除

リスト1
ワード文書を EXE にリソースとして埋め込んで使用
unit WordTestForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, plWordEx, StdCtrls, Buttons, ToolWin, ComCtrls, ExtCtrls;

type
  TplWordFormEx2 = class(TplWordFormEx)
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private 宣言 }
    ResStream    : TResourceStream;
    FileFullPath : String;
  public
    { Public 宣言 }
  end;

var
  plWordFormEx2: TplWordFormEx2;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム表示開始時の処理
//
//  (1) EXEのリソースからワードの文書を読み込み,ResStremに読み込む
//  (2) そのResStreamの内容,つまり元の文書をAAA.docと名前で保存
//  (3) AAA.docをワード操作フォームExで表示する
//=============================================================================
procedure TplWordFormEx2.FormShow(Sender: TObject);
begin
  ResStream    := TResourceStream.Create(hInstance, 'DocumentA', 'WORDDOC');
  FileFullPath := ExtractFilePath(ParamStr(0)) + 'AAA.doc';
  try
    ResStream.SaveToFile(FileFullPath);
  finally
    ResStream.Free;
  end;

  wdfFileFullPath := FileFullPath;
  inherited;
end;

//=============================================================================
//  フォームを閉じる時の処理
//  保存したワード文書を削除する
//=============================================================================
procedure TplWordFormEx2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FileExists(FileFullPath) then begin
    DeleteFile(FileFullPath);
  end;

  inherited;
end;

end.




実行ファイル EXE にワード文書を埋め込む - リソースマネージャー


前項の参考リンクの記事にもありますが,Delphi 2009 以降では,リソースの設定に,下図のようなリソースマネージャーが利用できます.
リソースタイプは RCDATA で構いません.リソース識別子は任意です.拡張子が .rc のファイルは自動で作成されます.


図3
リソースマネージャー

リスト2
ワード文書を EXE にリソースとして埋め込んで使用
//=============================================================================
//  フォーム表示開始時の処理
//
//  (1) EXEのリソースからワードの文書を読み込み,ResStremに読み込む
//  (2) そのResStreamの内容,つまり元の文書をAAA.docと名前で保存
//  (3) AAA.docをワード操作フォームExで表示する
//=============================================================================
procedure TplWordFormEx2.FormShow(Sender: TObject);
begin
  ResStream    := TResourceStream.Create(hInstance, 'Resource_1', RT_RCDATA);
  FileFullPath := ExtractFilePath(ParamStr(0)) + 'AAA.doc';
  try
    ResStream.SaveToFile(FileFullPath);
  finally
    ResStream.Free;
  end;

  wdfFileFullPath := FileFullPath;
  inherited;
end;