anchor.diff:      Exit;
   
     SetLength(fItems, HandCount);
  -  FPanel.Height := 32 * HandCount;
  -  FPanel.Width := 448;
  -  FPanel.Left := FPanel.Parent.Width - 448;
  +  Height := 32 * HandCount;
  +  Width := 448;
  +  Left := Parent.Width - 448;
     for i := 0 to HandCount - 1 do
     begin
       p := 0;
  
positive.code: 
      function GetValue: String;
      procedure SetValue(AValue: String);
    public
      constructor Create(aParent: TKMPanel; ATag: Integer; AImage: Word; AHint: String; AColor: TColor4);
      procedure SetPosition(ALeft, ATop: Integer);
      property Tag: Integer read FTag;
      property Value: String read GetValue write SetValue;
    end;
  
    TKMGUIGameSpectatorCustomPage = class
    private
      FPanel: TKMPanel;
    public
      constructor Create(aParent: TKMPanel); virtual;
      procedure Activation; virtual;
  
      property Panel: TKMPanel read FPanel;
    end;
  
    TKMGUIGameSpectatorArmy = class(TKMGUIGameSpectatorCustomPage)
    private
      fItems: array of array[WARRIOR_MIN..WARRIOR_MAX] of TKMGUIGameSpectatorItem;
    public
      constructor Create(aParent: TKMPanel); override;
      procedure Activation; override;
  
    end;
  
    TKMGUIGameSpectator = class
    private
      FPanel: TKMPanel;
      FDropBox: TKMDropList;
      FSelectedPage: TKMGUIGameSpectatorCustomPage;
      FPageList: TList;
  
      //TKMGUIGameSpectatorArmy;
  
      procedure ChangePage(Sender: TObject);
      procedure AddPage(AName: String; APage: TKMGUIGameSpectatorCustomPage);
    public
      constructor Create(aParent: TKMPanel);
      destructor Destroy; override;
  
negative.code:   FLabel.Caption := AValue;
  end;
  
  function TKMGUIGameSpectatorItem.GetVisible: Boolean;
  begin
    Result := FImage.Visible;
  end;
  
  procedure TKMGUIGameSpectatorItem.SetVisible(AValue: Boolean);
  begin
    FImage.Visible := AValue;
    FLabel.Visible := AValue;
  end;
  
  { TKMGUIGameSpectatorPanel }
  
  constructor TKMGUIGameSpectatorPanel.Create(aParent: TKMPanel);
  begin
    inherited Create(aParent, aParent.Width - 160, 32, 160, 30);
    Anchors := [anTop, anRight];
    Focusable := false;
    Hide;
  
  
  end;
  
  procedure TKMGUIGameSpectatorPanel.Activation;
  begin
  
  end;
  
  { TKMGUIGameSpectatorPanelResources }
  
  constructor TKMGUIGameSpectatorPanelResources.Create(aParent: TKMPanel);
  begin
    inherited;
  
  end;
  
  procedure TKMGUIGameSpectatorPanelResources.Activation;
  var
    i, p, HandCount, WareCount: Integer;
    WT: TWareType;
  begin
    inherited;
    HandCount := Min(MAX_LOBBY_PLAYERS, gHands.Count);
    if HandCount = Length(fItems) then
      Exit;
  
    SetLength(fItems, HandCount);
    Height := 32 * HandCount;
    Width := 448;
    Left := Parent.Width - 448;
    for i := 0 to HandCount - 1 do
    begin
      p := 0;
      for WT := WARE_MIN to WARE_MAX do
      begin
        WareCount := gHands[i].Stats.GetWareBalance(WT);
        if WareCount > 0 then
          p := p + 32;
        fItems[i, WT] := TKMGUIGameSpectatorItem.Create(Self, Integer(WT), gRes.Wares[WT].GUIIcon, gRes.Wares[WT].Title, gHands[i].FlagColor);
        fItems[i, WT].SetPosition(Width - p, i * 32);
        fItems[i, WT].Value := IntToStr(WareCount);
        fItems[i, WT].Visible := WareCount > 0;
      end;
    end;
  end;
  
  procedure TKMGUIGameSpectatorPanelResources.UpdateState(aTickCount: Cardinal);
  var
    i, p, HandCount, WareCount: Integer;
    WT: TWareType;
  begin
    inherited;
  
    if Length(fItems) = 0 then
      Exit;
  
    for i := 0 to HandCount - 1 do
    begin
      p := 0;
      for WT := WARE_MIN to WARE_MAX do
      begin
        WareCount := gHands[i].Stats.GetWareBalance(WT);
  
        if WareCount > 0 then
          p := p + 32;
  
        fItems[i, WT].SetPosition(Width - p, i * 32);
        fItems[i, WT].Value := IntToStr(WareCount);
        fItems[i, WT].Visible := WareCount > 0;
      end;
    end;
  end;
  
  { TKMGUIGameSpectatorPanelArmy }
  
  constructor TKMGUIGameSpectatorPanelArmy.Create(aParent: TKMPanel);
  begin
    inherited;
  
  end;
  
  procedure TKMGUIGameSpectatorPanelArmy.Activation;
  
    function GetUnitCount(AHand: TKMHand; AUnitType: TUnitType): Integer;
    var
  