PC_PRINTER_INFO_DOTNET

プリンターのネイティブ Hdc へのアクセスを可能にします。Rectangle オブジェクトおよび PageSettings オブジェクトとともにプリンター ハンドルの現在の .NET Graphics オブジェクトでデリゲートを呼び出します。
制約事項:
  • このルーチンは .NET COBOL でのみサポートされます。
  • このルーチンは現在、UNIX プラットフォームではサポートされていません。

構文:

    call "PC_PRINTER_INFO_DOTNET" using 
                                    by reference cblt-pi-printer-handle 
                                    by value cblt-printer-info-delegate 
                                    by value user-object 
                          returning status-code 
    end-call

パラメーター:

呼び出しプロトタイプの使用 PIC (32 ビット システム) PIC (64 ビット システム)
printer-handle cblt-pi-printer-handle pic x(4) comp-5 pic x(8) comp-5
delegate cblt-printer-info-delegate see delegate-id above see delegate-id above
user-object object object object
cblt-printer-info-delegate
デリゲートは次のように定義されます。
    delegate-id PrinterInfoDelegate. 
            procedure division using by value gr as type Graphics 
                                 by value pb as type Rectangle 
                                 by value ps as type PageSettings 
                                 by value uo as object 
                                . 
    end delegate. 
status-code
説明の読み方」を参照

入力パラメーター:

printer-handle
プリンターが開かれた場合に返されるプリンター ハンドル
delegate
Graphics、Rectangle、PageSettings、または user-object を受け取るデリゲート
user-object
デリゲートで使用する任意のオブジェクト

出力パラメーター:

delegate
デリゲート パラメーターが必須のパラメーターで呼び出されます。
status-code
プリンター処理ルーチンの戻りコード

ネイティブ リソースへのアクセス:

PC_PRINTER_INFO は、属性がページイベント時にのみ有効であるため、.NET プラットフォーム上のプリンター接続の基本的な Hdc 属性を返すことができません。ただし、PC_PRINTER_INFO_DOTNET API を使用すると、プリンターのネイティブ Hdc にアクセスできます。

デリゲートでは、グラフィック オブジェクトの GetHdc() メソッドおよび ReleaseHdc() メソッドを使用できます。次に例を示します。

    declare dn-hdc = gr::GetHdc() 
    try 
        *> use the dn-hdc 
    finally 
       invoke gr::ReleaseHdc() 
    end-try 

例:

次の例に、PC_PRINTER_INFO_DOTNET API を使用する方法を示します。

        $set iltarget"x86" 
        $set ilref"System.Drawing" 
        $set ilusing"System.Drawing". 
        $set ilusing"System.Drawing.Printing". 
 
        program-id. pcid. 
        special-names. 
            call-convention 74 is winapi. 
        working-storage section. 
        copy "cbltypes.cpy". 
        01. 
            03 document-title. 
            05 title-len         pic x(2) comp-5. 
            05 title-text        pic x(20). 
                03  font-family. 
            05 font-family-namelen  pic x(2) comp-5 value 80. 
            05 font-family-name     pic x(80). 
            03 abort               pic x(4) comp-5 value 1. 
            03 ctrl                pic x(4) comp-5 value 2. 
            03 flags               pic x(4) comp-5 value 1. 
            03 handle              pic x(4) comp-5. 
        01 status-code cblt-os-size value zeroes. 
 
        procedure division. 
            move 30 to title-len 
            move "PC_PRINTER_INFO_DOTNET Example" to title-text 
 
            call "PC_PRINTER_OPEN" using by reference handle 
                                            by reference document-title 
                                            by value flags 
                                            by value 0 
                                            returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
                stop run 
            end-if 
 
            declare pinfo-delegate as type PrinterInfoDelegate 
            set pinfo-delegate to 
                delegate(gr as type Graphics, 
                        pb as type Rectangle, 
                        ps as type PageSettings 
                        uo as object ) 
 
                *> create an Eclipse the side of the page 
                    declare customColor = type Color::FromArgb(50, type Color::Blue) 
                    declare shadowBrush = new SolidBrush(customColor) 
 
                    invoke gr::FillEllipse(shadowBrush, pb) 
 
                    declare bigText as string = uo as string 
                    declare drawFormat = new StringFormat 
                    set drawFormat::Alignment to type StringAlignment::Center 
                    set drawFormat::LineAlignment to type StringAlignment::Center 
 
                    invoke gr::DrawString(bigText, new Font("Courier New", 24), new SolidBrush(type Color::Red), pb, drawFormat) 
 
                end-delegate 
 
            declare nullObject as object = null 
 
            call "PC_PRINTER_INFO_DOTNET" using 
                    by reference handle 
                    by value pinfo-delegate 
                    by value "Big Red text in the middle" 
                    returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
            end-if 
 
            call "PC_PRINTER_CLOSE" using 
                by reference handle 
                returning status-code 
            end-call 
            if status-code not equal 0 
                exhibit named status-code 
                stop run 
            end-if 
            goback. 
        end program. 
 
        delegate-id PrinterInfoDelegate. 
            procedure division using by value gr as type Graphics 
                                    by value pb as type Rectangle 
                                    by value ps as type PageSettings 
                                    by value uo as object 
                                    . 
        end delegate.

次の例に、(デリゲートの名前を指定せずに) 匿名デリゲートを作成して PC_PRINTER_INFO_DOTNET API でそれを使用する方法を示します。

        declare pinfo-delegate as type PrinterInfoDelegate 
        set pinfo-delegate to 
                delegate(gr as type Graphics, 
                        pb as type Rectangle, 
                        ps as type PageSettings 
                        uo as object) 
 
                    display "DpiX = " gr::DpiX 
                    display "DpiY = " gr::DpiY 
 
                    display "Page Boundary : " pb 
                    display "Page Settings : " ps 
               end-delegate 

次のように、このデリゲートは PC_PRINTER_INFO_DOTNET API で使用できます。

        call "PC_PRINTER_INFO_DOTNET" using 
                    by reference handle 
                    by value pinfo-delegate 
                    by value self  *> user-object is the program itself 
                                    *> so you can do a pinfo-delegate to the entry-point 
        end-call