anchor.diff:  {$else}
     Consts,
   {$endif}
  -  SysUtils, Forms;
  +  SysUtils, Forms, Contnrs;
   
   type
  +  // BG, 29.01.2012: allow multiple prints of several THtmlViewer components at a time.
  +  TMapItem = class(TObject)
  +  private
  +    FKey: Integer;
  +    FValue: Pointer;
  +  public
  +    constructor Create(Key: Integer; Value: Pointer);
  +  end;
  +
     // BG, 29.01.2012: allow multiple prints of several THtmlViewer components at a time.
     TMap = class(TObject)
     private
  -    FKeys: TList;
  -    FValues: TList;
  +    FItems: TObjectList;
  +    function getItem(Index: Integer): TMapItem;
  +    property Items[Index: Integer]: TMapItem read getItem;
     public
       constructor Create;
       destructor Destroy; override;
  -    function Get(Key: Pointer): Pointer;
  -    function Put(Key, Value: Pointer): Pointer;
  -    function Remove(Key: Pointer): Pointer;
  +    function Get(Key: Integer): Pointer;
  +    function Put(Key: Integer; Value: Pointer): Pointer;
  +    function Remove(Key: Integer): Pointer;
     end;
   
   var
  
positive.code:   Application.ProcessMessages;
    if FPrinters <> nil then
    begin
      Printer := FPrinters.Get(Ptr(Prn));
      Result := (Printer <> nil) and not Printer.Aborted;
    end
    else
      Result := False;
  end;
  
  { TMap }
  
  constructor TMap.Create;
  begin
    inherited Create;
    FKeys := TList.Create;
    FValues := TList.Create;
  end;
  
  destructor TMap.Destroy;
  begin
    FKeys.Free;
    FValues.Free;
    inherited;
  end;
  
  function TMap.Get(Key: Pointer): Pointer;
  var
    I: Integer;
  begin
    I := FKeys.IndexOf(Key);
    if I >= 0 then
      Result := FValues[I]
    else
      Result := nil;
  end;
  
  function TMap.Put(Key, Value: Pointer): Pointer;
  var
    I: Integer;
  begin
    I := FKeys.IndexOf(Key);
    if I >= 0 then
    begin
      Result := FValues[I];
      FValues[I] := Value;
    end
    else
    begin
      Result := nil;
      FKeys.add(Key);
      FValues.add(Value);
    end;
  end;
  
  function TMap.Remove(Key: Pointer): Pointer;
  var
    I: Integer;
  begin
    I := FKeys.IndexOf(Key);
    if I >= 0 then
    begin
      Result := FValues[I];
      FKeys.Delete(I);
      FValues.Delete(I);
    end
    else
      Result := nil;
  end;
  
  { ThtPrinter }
  
negative.code:     lpszDocName := CTitle;
      lpszOutput := nil;
    end;
    FPrinters.Put(DC, Self);
    SetAbortProc(DC, AbortProc);
    StartDoc(DC, DocInfo);
    SetPrinting(True);
  