Delphi Programming / Object Pascal
[掲載 2013年11月20日] [更新 2013年11月20日] ワード操作フォームEx |
ワード操作フォームEx 参考コード類
ワード文書を EXE にリソースとして埋め込む |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE2 + Word 2010 |
ワード操作フォームEx は,ひな型となる文書を元に文書を操作する目的で開発しました.
ひな型となる文書はユーザに変更されたくはありません.ユーザに元の文書を変更されないようにする 1 つの方法として,元の文書を EXE にリソースとして埋め込んでしまう方法があります.
EXE を作成する時には元の文書は必要ですが,配布するアプリケーションに元のワード文書を添付する必要はありません.
下図は,次のコードを書いた WordDocRes.rc というファイルをプロジェクトに追加し,コンパイルして作成した EXE を実行した結果です.フォームを表示する時に,リソースから埋め込んだワードの文書を読み出して AAA.doc という名前で保存しています.それを表示します. |
DocumentA WORDDOC "文字列操作テスト文書.doc"
|
図1
起動時の画面
|
|
図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;
|