anchor.diff:    Close;
   
     kmcom.Apply; // I1338 - eliminate unneccesary re-render
  -end;
  -
  -procedure TfrmMain.InitNonVisualComponents;
  -begin
  -  dlgOpenAddin := TOpenDialog.Create(Self);
  -  dlgOpenAddin.Filter :=
  -      'Keyman add-ins (*.kma, *.kmp)|*.kma;*.kmp|Keyman add-in files (*' +
  -      '.kma)|*.kma|Keyman packaged add-ins (*.kmp)|*.kmp|All files (*.*' +
  -      ')|*.*';
  -  dlgOpenAddin.Title := 'Install Add-in';
  -
  -  dlgOpenVisualKeyboard := TOpenDialog.Create(Self);
  -  dlgOpenVisualKeyboard.Filter := 'On screen keyboard files (*.kvk)|*.kvk|All files (*.*)|*.*';
  -  dlgOpenVisualKeyboard.Title := 'Install Keyman Keyboard';
  -  dlgOpenVisualKeyboard.OnCanClose := dlgOpenVisualKeyboardCanClose;
   end;
   
   {-------------------------------------------------------------------------------
  
positive.code:     kbd.Loaded := StrToBool(params.Values['value']); //, 'true');
  end;
  
  procedure TfrmMain.Keyboard_InstallVisualKeyboard(params: TStringList);
  var
    kbd: IKeymanKeyboardInstalled;
  begin
    if GetKeyboardFromParams(params, kbd) and not Assigned(kbd.VisualKeyboard) then
      if dlgOpenVisualKeyboard.Execute then
      begin
        try
          kbd.InstallVisualKeyboard(dlgOpenVisualKeyboard.FileName);
        except
          on E:EOleException do // I1084, I1005 - Installing an invalid KVK file
            ShowMessage(E.Message);
        end;
        kbd := nil; // I773 - mcd - because Do_Content_Render reloads the keyman objects when Refresh-Keyman=true
        Do_Content_Render(True);
      end;
    kbd := nil;
  end;
  
  procedure TfrmMain.Keyboard_Options(Params: TStringList);
  var
    kbd: IKeymanKeyboardInstalled;
  
negative.code: 
    kmcom.AutoApply := False;
  
    Icon.ReleaseHandle;
    Icon.Handle := DuplicateIcon(hInstance, Application.Icon.Handle);
  
  