[All]
Vcl.Printers.TPrinter.PrinterIndexを-1を設定すると、「リストのインデックスが範囲を超えてます(-1)」エラーが起こる
概要: エラーが発生している症状の解決方法について説明します。
対象となるバージョン
・XE6
問題
デフォルトのプリンタを選択するには,PrinterIndex プロパティの値を -1 に設定します。
PrinterIndexプロパティの詳細は、こちらを参照してください。
XE6では、PrinterIndex プロパティに -1を設定すると、以下のような実行時エラーが発生します。
実行時エラーの画面
解決
この問題を解決するには、該当するユニットファイル(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;
..