XE6でVcl.Printers.TPrinter.PrinterIndexを-1を設定すると、「リストのインデックスが範囲を超えてます(-1)」エラーが発生

提供: Support
移動先: 案内検索

問題

デフォルトのプリンタを選択するには,PrinterIndex プロパティの値を -1 に設定します。PrinterIndexプロパティの詳細は、こちらを参照してください。

XE6では、PrinterIndex プロパティに -1を設定すると、以下のような実行時エラーが発生します。

Thumb03000038ujpn.png
実行時エラーの画面

解決

この症状は、XE7で修正されています。

XE6でこの問題を解決するには、該当するユニットファイル(Vcl.Printers.pas)を修正し、自身のプロジェクトへ組み込んでください。

Vcl.Printers.pasは、以下のフォルダパスに配置されています。

Windows 32ビットOSの場合:

C:\Program Files\Embarcadero\Studio\14.0\source\vcl

Windows 64ビットOSの場合:

C:\Program Files (x86)\Embarcadero\Studio\14.0\source\vcl


Vcl.Printers.pas(line 1249)

TPrinter.SetPrinterIndex


//(修正前) 
..
if (Value = -1) then
SetToDefaultPrinter;
if Value <> FPrinterIndex then
begin
FPrinterIndex := Value;
..

//(修正後) 
..
if (Value = -1) or (PrinterIndex = -1) then
SetToDefaultPrinter;
if Value <> FPrinterIndex then
begin
if Value <> -1 then 
FPrinterIndex := Value;
..