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

概要: エラーが発生している症状の解決方法について説明します。

dummy

対象となるバージョン

・XE6

dummy

    問題

デフォルトのプリンタを選択するには,PrinterIndex プロパティの値を -1 に設定します。

PrinterIndexプロパティの詳細は、こちらを参照してください。

dummy

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

dummy

Hide image

実行時エラーの画面

dummy

    解決

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

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

dummy

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

dummy

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;
..

dummy