anchor.diff:  
   procedure TfpgBaseEdit.DefaultPopupCut(Sender: TObject);
   begin
  +  if ReadOnly then
  +    Exit;
     CutToClipboard;
   end;
   
   procedure TfpgBaseEdit.DefaultPopupCopy(Sender: TObject);
   begin
  +  if ReadOnly then
  +    Exit;
     CopyToClipboard;
   end;
   
   procedure TfpgBaseEdit.DefaultPopupPaste(Sender: TObject);
   begin
  +  if ReadOnly then
  +    Exit;
     PasteFromClipboard
   end;
   
   procedure TfpgBaseEdit.DefaultPopupClearAll(Sender: TObject);
   begin
     if ReadOnly then
  -    Exit; //==>
  +    Exit;
     Clear;
  +end;
  +
  +procedure TfpgBaseEdit.DefaultPopupInsertFromCharmap(Sender: TObject);
  +var
  +  s: TfpgString;
  +begin
  +  if ReadOnly then
  +    Exit;
  +  s := fpgShowCharMap;
  +  if s <> '' then
  +    DoPaste(s);
   end;
   
   procedure TfpgBaseEdit.SetDefaultPopupMenuItemsState;
  
positive.code: 
  uses
    fpg_stringutils,
    fpg_constants;
  
  const
    // internal popupmenu item names
  
negative.code:     itm.Name := ipmPaste;
      itm := FDefaultPopupMenu.AddMenuItem(rsDelete, '', @DefaultPopupClearAll);
      itm.Name := ipmClearAll;
      itm := FDefaultPopupMenu.AddMenuItem('-', '', nil);
      itm.Name := 'N1';
      itm := FDefaultPopupMenu.AddMenuItem(rsInsertFromCharacterMap, '', @DefaultPopupInsertFromCharmap);
      itm.Name := ipmCharmap;
    end;
  
    SetDefaultPopupMenuItemsState;
  