anchor.diff:      end;
     end;
   
  -  // Messages
  -  if Key = gResKeys[SC_CENTER_ALERT].Key then
  -  begin
  -    // Spacebar centers you on the latest alert
  -    LastAlert := fAlerts.GetLatestAlert;
  -    if LastAlert <> nil then
  -      fViewport.Position := LastAlert.Loc;
  -  end;
  -  if Key = gResKeys[SC_DELETE_MSG].Key then Button_MessageDelete.Click;
  -  if Key = gResKeys[SC_CHAT_MP].Key then            // Enter is the shortcut to bring up chat in multiplayer
  -    if (fUIMode in [umMP, umSpectate]) then
  -    begin
  -      if not fGuiGameChat.Visible then
  -      begin
  -        Allies_Close(nil);
  -        Message_Close(nil);
  -        MessageLog_Close(nil);
  -        Label_MPChatUnread.Caption := ''; // No unread messages
  -        fGuiGameChat.Show;
  -      end else
  -        fGuiGameChat.Focus;
  -    end;
  -
  -    // General function keys
  +  CheckMessageKeys(Key);
  +
  +  // General function keys
     if Key = gResKeys[SC_PAUSE].Key then
       if (fUIMode = umSP) then SetPause(True); // Display pause overlay
   
  
positive.code: end;
  
  
  // Note: we deliberately don't pass any Keys to MyControls when game is not running
  // thats why MyControls.KeyUp is only in gsRunning clause
  // Ignore all keys if game is on 'Pause'
  procedure TKMGamePlayInterface.KeyUp(Key: Word; Shift: TShiftState; var aHandled: Boolean);
  var
    LastAlert: TKMAlert;
    SelectId: Integer;
    SpecPlayerIndex: ShortInt;
    KeyHandled: Boolean;
  
negative.code:   end;
  
    MessageLog_Update(True);
  end;
  
  
  procedure TKMGamePlayInterface.MessageLog_ItemClick(Sender: TObject);
  var
    ItemId, MessageId: Integer;
  begin
    ItemId := ColumnBox_MessageLog.ItemIndex;
    if ItemId = -1 then Exit;
  
    MessageId := ColumnBox_MessageLog.Rows[ItemId].Tag;
    if MessageId = -1 then Exit;
  
    MessageLog_ShowMessage(MessageId);
  end;
  
  
  