Как добавить MessageDlg?!

отредактировано 06:36 Раздел: FastScript
Добавляю типы:
  ...
  AddEnum('TMsgDlgType', 'mtWarning, mtError, mtInformation, mtConfirmation, mtCustom');
  AddEnum('TMsgDlgButtons', 'mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp');
  AddMethod('function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer', CallMethod1, FCatOther);

Пишу обработчик:
function TFunctions.CallMethod1(Instance: TObject; ClassType: TClass;
  const MethodName: String; var Params: Variant): Variant;
begin
  Result := 0;
  If MethodName = 'MESSAGEDLG' then begin
    Result := MessageDlg(String(Params[0]),
              TMsgDlgType(Integer(Params[1])),
              TMsgDlgButtons([TMsgDlgBtn(Integer(Params[2]))]),
              Integer(Params[3]));
  end;
end;
Компилится отлично, но при вызове из скрипта функции MessageDlg ругается:
<span style='color:red'>"Could not convert variant of type (Array Variant) into type (Inteher)"</span> ;)

Думаю, что как-то иначе надо указывать параметр с TMsgDlgButtons, но как? ;)

Комментарии

  • отредактировано 06:36
    Это надо добавлять как множество:

    AddEnumSet('TMsgDlgButtons', 'mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp');

    В обработчике надо Integer(Params[2]) привести к типу TMsgDlgButtons, но не так, как у вас, а примерно так (пример с TLocateOptions):
      function IntToLocateOptions(i: Integer): TLocateOptions;
      begin
        Result := [];
        if (i and 1) <> 0 then
          Result := Result + [loCaseInsensitive];
        if (i and 2) <> 0 then
          Result := Result + [loPartialKey];
      end;
    

    И последнее, в скрипте вызов ф-и делать так:

    MessageDlg('msg', mtError, mbYes + mbNo, 0)
  • отредактировано 06:36
    Большое спасибо, все заработало! ;)

    Осталось только научиться угадывать вот такие тонкости:
    написал:
    И последнее, в скрипте вызов ф-и делать так:
    MessageDlg('msg', mtError, mbYes + mbNo, 0)
    И вопросы начнут сами собой пропадать... ;)
  • отредактировано 06:36
    А их не надо угадывать - в документации все описано.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.