anchor.diff:      CopyToClipboard;
   end;
   
  -{----------------TMapItem.Create}
  +{ TMapArea }
  +
  +//-- BG ---------------------------------------------------------- 31.12.2011 --
  +function TMapArea.PtInArea(X, Y: Integer): Boolean;
  +begin
  +  Result := PtInRegion(FRegion, X, Y);
  +end;
  +
  +{ TMapAreaList }
  +
  +//-- BG ---------------------------------------------------------- 31.12.2011 --
  +function TMapAreaList.getArea(Index: Integer): TMapArea;
  +begin
  +  Result := get(Index);
  +end;
  +
  +{ TMapItem }
   
   constructor TMapItem.Create;
   begin
     inherited Create;
  -  Areas := ThtStringList.Create;
  -  AreaTargets := ThtStringList.Create;
  -  AreaTitles := ThtStringList.Create;
  +  FAreas := TMapAreaList.Create;
   end;
   
   destructor TMapItem.Destroy;
  +begin
  +  FAreas.Free;
  +  inherited Destroy;
  +end;
  +
  +function TMapItem.GetURL(X, Y: Integer; out URLTarg: TUrlTarget; out ATitle: ThtString): boolean;
   var
     I: Integer;
  -begin
  -  for I := 0 to Areas.Count - 1 do
  -    DeleteObject(THandle(Areas.Objects[I]));
  -  Areas.Free;
  -  AreaTargets.Free;
  -  AreaTitles.Free;
  -  inherited Destroy;
  -end;
  -
  -function TMapItem.GetURL(X, Y: Integer; out URLTarg: TUrlTarget; out ATitle: ThtString): boolean;
  -var
  -  I: Integer;
  +  Area: TMapArea;
   begin
     Result := False;
  -  with Areas do
  -    for I := 0 to Count - 1 do
  -      if PtInRegion(THandle(Objects[I]), X, Y) then
  +  for I := 0 to FAreas.Count - 1 do
  +  begin
  +    Area := FAreas[I];
  +    if Area.PtInArea(X, Y) then
  +    begin
  +      if Area.HRef <> '' then {could be NoHRef}
         begin
  -        if Strings[I] <> '' then {could be NoHRef}
  -        begin
  -          URLTarg := TUrlTarget.Create;
  -          URLTarg.URL := Strings[I];
  -          URLTarg.Target := AreaTargets[I];
  -          ATitle := AreaTitles[I];
  -          Result := True;
  -        end;
  -        Exit;
  +        URLTarg := TUrlTarget.Create;
  +        URLTarg.URL := Area.HRef;
  +        URLTarg.Target := Area.Target;
  +        ATitle := Area.Title;
  +        Result := True;
         end;
  +      Exit;
  +    end;
  +  end;
   end;
   
   procedure TMapItem.AddArea(Attrib: TAttributeList);
   const
     MAXCNT = 300;
  -var
  -  I, Cnt, Rad: Integer;
  -  HRef, S, Target, Title: ThtString;
  -  S1, Nm: ThtString;
  -  Coords: array[0..MAXCNT] of Integer;
  -  Rect: TRect absolute Coords;
  -  Handle: THandle;
  -  Shape: (Rec, Circle, Poly);
  -
  -  procedure GetSubStr;
  +
  +  function GetSubStr(var S: ThtString): ThtString;
     var
       J, K: Integer;
     begin
  
positive.code: {$else}
    Windows,
  {$endif}
    SysUtils, Classes, Graphics, ClipBrd, Controls, Messages, Variants, Types,
  {$IFNDEF NoGDIPlus}
    GDIPL2A,
  {$ENDIF}
  
negative.code:     property Last: Integer read utText.Last;
    end;
  
    // BG, 31.12.2011:
    TMapArea = class(TObject)
    private
      FHRef: ThtString;
      FRegion: THandle;
      FTarget: ThtString;
      FTitle: ThtString;
    public
      function PtInArea(X, Y: Integer): Boolean;
      property HRef: ThtString read FHRef;
      property Target: ThtString read FTarget;
      property Title: ThtString read FTitle;
    end;
  
    // BG, 31.12.2011: 
    TMapAreaList = class(TObjectList)
    private
      function getArea(Index: Integer): TMapArea;
    public
      property Items[Index: Integer]: TMapArea read getArea; default;
    end;
  
    TMapItem = class(TObject) {holds a client map info}
    private
      FAreas: TMapAreaList;
    public
      MapName: ThtString;
      constructor Create;
      destructor Destroy; override;
      function GetURL(X, Y: Integer; out URLTarg: TURLTarget; out ATitle: ThtString): boolean;
  