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 |
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 を使用する方法を示します。
$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
ネイティブ リソースへのアクセス:
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