Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

例 : Visual Basic でのプリンタのサポート

インターシステムズは、ObjectScript から Windows の既定のプリンタ (VB Printer オブジェクト) を使用したコールバックの例を示す Caché Direct サンプルを提供できます。このサンプルの副産物として、Visual Basic フォームが 1 つ提供されますが、このフォームはどのようなプロジェクトにでも組み入れることができ、必要に応じて使用または拡張できます。また、Screen や Clipboard などの Visual Basic オブジェクトをサポートするように拡張することも簡単にできます。

このサンプル・ルーチンは、それ自体を Windows の既定のプリンタに出力します。このとき数種類のフォントが使用され、コメントは斜体で、ページのヘッダと数値は異なるフォントで印刷されます。このルーチンの記述は非常に単純で、必要となる印刷機能のほとんどが含まれています。 印刷モデルは Visual Basic (および Windows) のモデルです。Caché のモデルではありません (Write コマンドへのスラッシュ・パラメータをカスタム GBI デバイスに実装できますが、このサンプルより機能が優れていることも、便利なこともありません。Caché 規則に対して 1 つ妥協されているのは、ObjectScript モデルが後に続く、Print メソッドのパラメータです。このほうが簡単で馴染みある方法となるためです。Print() メソッドへの引数は二重引用符で囲まれた文字列となることに注意してください。これは、ObjectScript 変数の名前は、Basic にとって何の意味もないからです。

概要

一般に、ObjectScript ルーチンから Basic コードを実行するには、このコードをボタンの Click イベントに配置して、このボタンの Value プロパティを 1 に設定します。これにより、Click イベントが起動され、Basic コードが実行されるようになります。 このバリエーションとして、他のアクションに応じて起動される他のイベントがあるという事実を活用できます。特に、テキスト・コントロールは、Text プロパティへの変更に対応して Change イベントを起動します。これにより、Caché からの呼び出し 1 回で、Text プロパティに適切な文字列を設定し、Change イベント・コードにこれを解析させることができるので便利です。 結果がある場合、同じテキスト・コントロールの Tag プロパティに返されます。 このアプローチは、まったく一般的な方法で、独立した隠しフォームで使用できます。また、すべて Basic で記述されます。

内部コマンドの構文

サンプルには、コマンド文字列を書式設定し、これをプリンタ・オブジェクトに送信するための簡単な ObjectScript ルーチンがいくつか含まれています。 Text プロパティには、コマンドと数個の引数から構成される文字列が含まれます。このコマンドは、Printer オブジェクトを使って実行される、プロパティの設定や取得、メソッドの実行などの操作に対応します。

プロパティの設定

プロパティを設定するには、SetProp() の後に、property_name=value の形式で 1 つ以上のプロパティ名と値のペアをコンマで区切って指定します。これにより、1 つの呼び出しで、複数のプロパティを設定できます。 例えば、Printer1 インスタンスに直接アクセスするには、次のようにします。

Set _Printer1!txtPrint.Text="SetProp:FontName=Arial,FontSize=12,FontBold=1"

また、ヘルパー・ルーチンを通じてプリンタにアクセスするには、次のようにします。

Do SetProp^%CDPrt("FontName=Arial,FontSize=12,FontBold=1")

プロパティの取得

プロパティの値を取得するには、GetProp() の後に、コンマで区切ったプロパティ名を指定します。このクエリに対する応答は、Tag プロパティに、SetProp() 引数と同じ形式で設定されます。 例えば、プリンタに直接アクセスするには、次のようにします。

Set _Printer1!txtPrint.Text="GetProp:FontName,FontSize,FontBold"

また、ヘルパー・ルーチンを通じてプリンタにアクセスするには、次のようにします。

Set prop=$$GetProp^%CDPrint("FontName,FontSize,FontBold")

その後、Tag プロパティに、次の形式の文字列が設定されます。

"FontName=Arial,FontSize=12,FontBold=1"

このプロパティは、関数の結果としても返されます。

メソッドの実行

このサンプルで使えるメソッドは、NewPage()Scale()TextHeight()TextWidth()Print()、および EndDoc() です。これらのメソッドにはそれぞれ、ヘルパー・ルーチンを通じて実行可能な同等のコマンドがあります。

Print() メソッドの引数は、Basic の規約ではなく、Write コマンドと同様、ObjectScript 形式制御規約に従って指定します。 例えば、プリンタに直接アクセスするには、次のようにします。

Set _Printer1!txtPrint.Text="NewPage"
Set _Printer1!txtPrint.Text="Scale:0,0,80,60"  or  "Scale"
Set _Printer1!txtPrint.Text="TextHeight:"12""
Set _Printer1!txtPrint.Text="TextWidth:"50"" 
Set _Printer1!txtPrint.Text="Print:!,?8,""Some text"""
Set _Printer1!txtPrint.Text="EndDoc"  

ヘルパー・ルーチンを通じてプリンタにアクセスするには、次のようにします。

Do NewPage^%CDPrint
Do Scale^%CDPrint(0,0,80,60)  or  Do Scale^%CDPrint( )
Set ht=TextHeight^%CDPrint("12")
Set wid=TextWidth^%CDPrint("50")
Do Print^%CDPrint("!,?8,""Some text""")
Do EndDoc^%CDPrint  

Print() メソッドへの引数は二重引用符で囲まれた文字列にする必要があります。これは、ObjectScript 変数の名前は、Basic にとって何の意味もないからです。内部引用を二重にして、適切に文字列を引用しているルーチンについては、サンプル・コードの quote^CDPrTest を参照してください。

FeedbackOpens in a new tab