Delphi4.0を使用してWord97を直接制御する
番号: QA003053
作成日: 2000 年 6 月 15 日最終更新日: 2000 年 6 月 15 日
カテゴリ:
記事:
概要: PowerBuilder をプレイしたことがある人は、PB で最も重要なテクノロジがデータウィンドウ テクノロジであることを知っているはずです。これをフォームの設計、データ入力の処理、レポートの設計に使用すると非常に便利です。ただし、Delphi のレポート支援機能は PB に比べてはるかに劣っています。 Delphi のプロフェッショナル バージョンには QuickReport が含まれていますが、これは QSD AS (ノルウェーの会社) によってライセンス供与されたレポート コンポーネントのコレクションです。もちろん、ReportSmith や Cristal Report などの外部レポート ツールを使用することもできます。ただし、コントロールは少し複雑で、コントロールと Delphi の間の統合が不足しています。
「公文書管理システム」のオンライン版を開発していたとき、公文書を印刷する際にさまざまな方法を試しました。私たちの要件は、通常の公式文書を公式文書形式で印刷することであり、ユーザーはその組版に関していくつかの簡単な制御を実行できます。 Xiaohui は最初に QuickReport を使用してみましたが、その効果は非常に不十分で、特に一部の中国語形式のサポートに関しては、その後、Xiaohui がそれに夢中になり、デザイン ツールに頼らずに印刷プログラムを手書きで作成しただけでした。これは残念でした。 Xiaohui のスキルは十分ではなく、執筆途中でプレイを続けることができなくなったため、別の方法を見つける必要がありました。たまたまその日「中国コンピュータニュース」が届いていて、VBでExcelを使う方法についての記事が載っていました。 Xiaohui さんは次のように考えました。Delphi を使用してデータを Word に送信し、Word で編集と組版作業を完了させてみてはいかがでしょうか。端的に言えば、OLE オートメーション テクノロジを使用しています。
Xiaohui が試してみたところ、効果は良好でした。 ——プログラマーにとって、自分の書いたプログラムは、自分の機能を十分に実現するために他人のアプリケーションと接続しなければなりませんが、それは鶏の群れにアヒルを入れるようなもので、いつも心に引っかかるものがあります。しかし、開発作業がタイトなため、ディレクターは 3 ~ 4 回おきに催促してきましたが、結果的には何の変哲もないものになってしまいましたが、Xiaohui さんは気にしていませんでした。さて、早速、Xiaohui がどのようにしてそれを達成したかを見てみましょう—
リンク: http://www.xiaohui.com
司会者:元のリンクの有効期限が切れているためです。ここに原文を掲載します。
1. はじめに
PowerBuilder をプレイしたことがある人は、PB で最も重要なテクノロジがデータウィンドウ テクノロジであることを知っているはずです。これを使用すると、フォームの設計、データ入力の処理、およびレポートの設計に非常に便利です。ただし、Delphi のレポート支援機能は PB に比べてはるかに劣っています。 Delphi のプロフェッショナル バージョンには QuickReport が含まれていますが、これは QSD AS (ノルウェーの会社) によってライセンス供与されたレポート コンポーネントのコレクションです。もちろん、ReportSmith や Cristal Report などの外部レポート ツールを使用することもできます。ただし、コントロールは少し複雑で、コントロールと Delphi の間の統合が不足しています。
「公文書管理システム」のオンライン版を開発していたとき、公文書を印刷する際にさまざまな方法を試しました。私たちの要件は、通常の公式文書を公式文書形式で印刷することであり、ユーザーはその組版に関していくつかの簡単な制御を実行できます。 Xiaohui は最初に QuickReport を使用してみましたが、その効果は非常に不十分で、特に一部の中国語形式のサポートに関しては、その後、Xiaohui がそれに夢中になり、デザイン ツールに頼らずに印刷プログラムを手書きで作成しただけでした。これは残念でした。 Xiaohui のスキルは十分ではなく、執筆途中でプレイを続けることができなかったため、別の方法を見つける必要がありました。たまたまその日「中国コンピュータニュース」が届いていて、VBでExcelを使う方法についての記事が載っていました。 Xiaohui は次のように考えました。Delphi を使用してデータを Word に送信し、Word で編集と組版作業を完了させてみてはいかがでしょうか。端的に言えば、OLE オートメーション テクノロジを使用しています。
Xiaohui はそれを試してみましたが、効果は問題ありませんでした。 ——プログラマーにとって、自分の書いたプログラムは、自分の機能を十分に実現するために他人のアプリケーションと接続しなければなりませんが、それは鶏の群れにアヒルを入れるようなもので、いつも心に引っかかるものがあります。しかし、開発作業がタイトなため、ディレクターは 3 ~ 4 回おきに催促してきましたが、結果的には何の変哲もないものになってしまいましたが、Xiaohui さんは気にしていませんでした。さて、早速、Xiaohui がどのようにしてそれを達成したかを見てみましょう—
2. フォームデザイン
率直に言ってしまえば、実はとてもシンプルなことなのです。 Xiaohui はここで簡単なサンプル プログラムを作成しました。
1. Form1 の Font.name を「Songti」に、Font.size を 12 に設定します。
2. 5 つの tLable コントロール、label1 ~ labe5 をフォーム上に順番に配置します。キャプション プロパティは、「文書番号」、「タイトル」、「受信単位」、「テキスト」、および「送信単位」です。
3. 5 つの編集コントロール: tEdit、tEdit、tEdit、tMemo、および tEdit をフォーム上に順番に配置します。それらの名前属性は、それぞれ ED_WenHao、ED_BiaoTi、ED_ShouWenDanWei、ED_ZhenWen、および ED_FaWenDanWei です。
4. 2 つの tButton コントロールをフォーム上に順番に配置します。それらの name 属性は Btn_PRintToWord と btn_Quit で、Caption 属性はそれぞれ 'Print' と 'Exit' です。
フォームのデザイン形式については、この記事の最後に添付した図を参照してください。
3. コード設計
プログラムセグメントは次のとおりです。
ユニットユニット1;
インタフェース
用途
ウィンドウ、メッセージ、SysUtils、クラス、グラフィックス、コントロール、フォーム、ダイアログ、
StdCtrls、OleCtnrs、ComObj;
タイプ
TForm1 = クラス(TForm)
ラベル 1: T ラベル;
ラベル 2: T ラベル;
ラベル 3: T ラベル;
ラベル 4: T ラベル;
ラベル5: Tラベル;
ED_WenHao: T編集;
ED_BiaoTi: T編集;
ED_ShouWenDanWei: T編集;
ED_ZhenWen: Tメモ;
ED_FaWenDanWei: T編集;
Btn_PrintToWord: TButton;
Btn_Quit: Tボタン;
プロシージャ Btn_PrintToWordClick(送信者: TObject);
プロシージャ Btn_QuitClick(送信者: TObject);
プライベート
{プライベート宣言}
公共
{公的宣言}
終わり;
変数
フォーム1: TForm1;
実装
{$R *.DFM}
//開始:ワードイベントにデータを送信
プロシージャ TForm1.Btn_PrintToWordClick(送信者: TObject);
vAR
VarWord: Variant;// WORD の作成時に使用されます
始める
試す
// 1. OleObject を作成し、word97 に接続します
VarWord:=CreateOleObject('word.basic');
// 2. Word97 用の新しいファイルを作成します
VarWord.FileNew;
// 3. Word97の基本ステータスを設定する
VarWord.ViewZoom75 //表示率を75%に設定します。
VarWord.ViewPage //ページ表示モードに変更します。
// 4. 現在のデータ コントロールに関する情報を Word97 に送信します。
// 4.1 文書番号データの送信
VarWord.CenterPara //中央揃え;
Varword.font('宋体') //フォントを設定します。
VarWord.FontSize(14); //フォントサイズを設定します。
varword.insert(#13+#13+ED_WenHao.Text+#13+#13+#13);
// 4.2 ヘッダーデータの送信
VarWord.font('HeiBi');
VarWord.Fontsize(16);
VarWord.insert( ED_BiaoTi.text+#13);
// 4.3 受信ユニットのデータを送信する
VarWord.LeftPara; // 左揃え
VarWord.Font('宋体');
VarWord.fontSize(14);
VarWord.Insert(#13+ ED_ShouWenDanWei.Text+':'+#13);
// 4.5 テキストデータを送信する
VarWord.fontSize(14);
VarWord.Insert( ED_ZhenWen.Text+#13);
// 4.6 送信ユニットデータの送信
VarWord.RightPara; //右揃え
VarWord.fontSize(14);
VarWord.Insert( ED_FaWenDanWei.Text+#13);
// 5 つの最終設定
VarWord.StartOfdocument //ドキュメントの先頭に移動します。
VarWord.AppMaxiMize //ウィンドウを最大化するように設定します。
VarWord.AppShow // アプリケーションを表示します。
を除外する
showmessage('Microsoft Word の実行に失敗しました!');
終了; // 試行の終了
終わり;
//end:ワードイベントに送信されるデータ
//開始: ウィンドウを閉じるイベント
プロシージャ TForm1.Btn_QuitClick(送信者: TObject);
始める
近い;
終わり;
//終了: ウィンドウを閉じるイベント
終わり。
// これでメインプログラムは終了です
4. 注意事項
1. 説明
1. これは単なるデモンストレーション例であるため、実際の操作では、対応する tEdit および tMemo コントロールを tDBEdit および tDBMemo コントロールに置き換えたり、tTable や tDataSource などのコントロールを追加して接続することができます。データベースに。
2. このガイドでは、バッチ印刷の方法については考慮していません。
3. このプログラムは、Pwin97、Delphi 4.0 Professional Edition、および中国語 Word97 に合格しています。
4. Word にはさまざまなバージョンがあるため、Microsoft は一部の OLE オートメーション インターフェイスを各外国語に変換しています。他のバージョンの Word を使用すると、このプログラムが正しく動作しない可能性があります。
5. Word97 のヘルプにまとめられているマクロ コマンドから対応するドライバ コマンドを取得するか、Word97 の [ツール] メニューをクリックし、[カスタマイズ] をクリックし、[キーボード] ボタンをクリックして、カテゴリに表示される Word コマンドを表示します。ワード97。
2. メリットとデメリット
1. OLE オートメーション技術により、公式文書の組版と印刷作業が Word に引き継がれ、エンドユーザーの利便性が向上します。
2. Word97 では、データを変更しても、それを呼び出したメインプログラムに送り返してデータベースに反映することができません。それが不便なのです。
3. この例は、特殊な状況下での単なるアプリケーションです。大量のデータ ラベルを印刷して表を作成したい場合、Xiaohui はレポートを使用する方が柔軟だと考えています。
記事のソース:プログラマーとしての Xiaohui の旅。