anchor.diff:      Hint := '';
       TabOrder := 20;
       OnDoubleClick := @tvProjectDoubleClick;
  +    OnKeyPress := @tvProjectKeyPressed;
     end;
   
     tsFiles := TfpgTabSheet.Create(pnlTool);
  
positive.code:     procedure   AddUnitToProject(const AUnitName: TfpgString);
      procedure   miProjectAddUnitToProject(Sender: TObject);
      procedure   tvProjectDoubleClick(Sender: TObject; AButton: TMouseButton; AShift: TShiftState; const AMousePos: TPoint);
      procedure   grdMessageKeyPressed(Sender: TObject; var KeyCode: Word; var ShiftState: TShiftState; var Consumed: Boolean);
      procedure   TabSheetClosing(Sender: TObject; ATabSheet: TfpgTabSheet);
      procedure   BuildTerminated(Sender: TObject);
  
negative.code:   end;
  end;
  
  procedure TMainForm.tvProjectKeyPressed(Sender: TObject; var KeyCode: word; var ShiftState: TShiftState; var Consumed: boolean);
  var
    r: TfpgTreeNode;
    n: TfpgTreeNode;
    i: integer;
  begin
    if keyCode = keyDelete then
    begin
      r := GetUnitsNode;
      if r.FindSubNode(tvProject.Selection.Text, False) = tvProject.Selection then
      begin
        // remove from project, then from tree view
        n := tvProject.Selection;
        tvProject.GotoNextNodeUp;
        r.Remove(n);
        tvProject.Invalidate;
        GProject.UnitList.Remove(TUnit(n.Data));
  
        for i := 0 to pcEditor.PageCount-1 do
        begin
          if pcEditor.Pages[i].TagPointer = n.Data then
          begin
            pcEditor.Pages[i].TagPointer := nil;
            break
          end;
        end;
        TUnit(n.Data).Free;
        n.Free;
      end;
    end;
  end;
  
  procedure TMainForm.grdMessageKeyPressed(Sender: TObject; var KeyCode: Word; var ShiftState: TShiftState; var Consumed: Boolean);
  var
    cr: TClipboardKeyType;
  