実際のアプリケーションでは、レポートの内容はめったに変更されませんが、そのフォント形式とレイアウトは頻繁に変更されることがわかりました。また、ユーザーはデータベースの実際の内容を変更したくないが、特定のニーズに応じてレポートの内容を変更したい場合もあります。 ReportSmith を使えば前者の問題は解決できますが、後者については何もできず、インターフェースが英語なのでユーザーには不向きです。 3.0 で TQReport レポート コンポーネントを使用する場合、どちらもリアルタイムで解決することはできないため、使用する前に元のコードを変更して再コンパイルする必要があります。 Word と Excel を使用すると、上記の欠点を完全に克服できます。具体的な実装は次のとおりです (Word の実装を例にします)。
まず、Word を使用してレポートの書式を編集し、書式をレイアウトし、出力するデータ項目をフォーム フィールドに置き換え、名前を付けます。ここでは、一時的にフォーム フィールド item1 と item2 (両方ともテキスト タイプ) があると仮定し、このドキュメントをテンプレート ファイル Example.dot として保存し、次の手順を実行します。
1) Delphi3 を実行し、Form1 に設定された System コンポーネントに TDdeClientCov コンポーネントを追加し、DdeExample という名前を付け、ConnectMode を ddeManual (手動モード) に設定します。DdeService を '(WinWord)' に設定します。
2) 次のように、Word をアクティブにするカスタム プロセスを作成します。
PROcedure Tform1.WordActive(Cmds: TStrings);
変数
ワードパス: 文字列;
始める
if(not DdeExample.OpenLink) then {動的にリンクされているかどうかを判断}
始める
if(FindWindow('OpusApp', nil)=0) then
始める
WordPath := 'C:msofficewinword';
if(WordPath=') then
ShowMessage('中国語 Word がインストールされていないか、パスが設定されていません。中国語版の Word をインストールして設定してください。')
そうでなければ始まる
DdeExample.ServiceApplication := WordPath+'Winword.exe';
if(DdeExample.OpenLink) then {マクロ コマンドが動的にリンクされている場合}
DdeExample.ExecuteMacroLines(Cmds,False)
それ以外
ShowMessage('中国語版の Word を起動できません!');
DdeExample.ServiceApplication := 'WinWord.exe';
終わり;
終わり
else begin{マクロ コマンドが動的にリンクされている場合}
DdeExample.ExecuteMacroLines(Cmds,False);
終わり;
終わり
それ以外
DdeExample.ExecuteMacroLines(Cmds,false);
終わり;
以下をプライベート宣言領域に追加します。
プロシージャ ActiveWord(Cmds: TStrings);
3) ボタン Button1 を Form1 に追加し、その onclick イベントに次のコードを記述します。
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
Cmds:TStringList;{コマンドの作成}
TempItem1、TempItem2:文字列;
始める
cmds:=TStringList.Create;
cmds.クリア;
TempItem1:='データ項目 1';
TempItem2:='データ項目 2';
コマンドを使用して行う
始める
クリア;
Add('[FileNew.Template ="Example.Dot″]');{テンプレート ファイル Example.Dot を開く}
Add('[AppMaximize]');{ドキュメントの最大化}
Add('[SetFormResult "Item1",'''+TempItem1+''']');{データ TempItem1 をフォーム フィールド Item1 に渡す}
Add('[SetFormResult "Item2","'+TempItem2+'"]);{データ TempItem2 をフォーム フィールド Item2 に渡す}
終わり;
WordActive(DdeExample,Cmds);{カスタム プロセスを呼び出す}
Cmds.Free;{コマンドを解放}
終わり;
このプログラムを実行し、Button1 をクリックすると、Word が起動し、2 つのデータ項目 (データ項目 1、データ項目 2) が画面に表示されます。最後に、このレポートは特定のアプリケーションとは何の関係もないため、このレポートの形式とデータを自由に変更できます。
この例では、中国語 Word6 または中国語 Word7 が使用されます。 Word97のマクロコマンドはVisual Basicステートメントに変更されているため、Word97で実装する場合はマクロコマンドを対応するコードに変更してください。
これは簡単な例です。Word のマクロ記録機能を使用して、さらに多くのマクロ (表の自動生成、テキストの入力、フォントの変更、その他のマクロ コマンドなど) を記録し、データベース内のさまざまなテーブルに接続して追加できます。必要なさらに複雑な機能を実現できます。