2014年05月19日

PrinterIndex := -1 時のバグ(Delphi XE6)


”通常使うプリンタ”にプリンタ設定する際使用する、
PrinterIndex := -1
についてエラーが出る不具合対応。
DelphiXE5までは、問題なし。

何でこんなバグがまぎれんねんという話はおいといて、対策。
http://qc.embarcadero.com/wc/qcmain.aspx?d=124532

Vcl.Printers.pas
---------------------------------------------------------------------------
procedure TPrinter.SetPrinterIndex(Value: Integer);
var
  lDevice, lDriver, lPort : Array[0..255] of Char;
  lDeviceMode : THandle;
begin
  CheckPrinting(False);
  if (Value < -1) or (Value >= Printers.Count) then
    RaiseError(SPrinterIndexError);
  if (Value = -1) or (PrinterIndex = -1)  then //<-- この行条件変更
    SetToDefaultPrinter;
  if Value <> FPrinterIndex then
  begin
    if Value <> -1 then                  //<-- この行追加
      FPrinterIndex := Value;
    with TPrinterDevice(Printers.Objects[FPrinterIndex]) do
{$IF DEFINED (CLR)}
      SetPrinter(Device, Driver, Port, 0);
{$ELSE}
      Printer.GetPrinter(lDevice, lDriver, lPort, lDeviceMode);
    GlobalUnlock(lDeviceMode);
    GlobalFree(lDeviceMode);
    lDeviceMode := 0;
    Printer.SetPrinter(lDevice, lDriver, lPort, lDeviceMode);
{$ENDIF}
    FreeFonts;
    SetState(TPrinterState.psNoHandle);
  end;
end;
---------------------------------------------------------------------------
ということらしい。
とりあえず試したらうまく行った。...more
posted by しんくそふと at 20:25| Comment(0) | TrackBack(0) | エラー対応覚え