Перейти к содержанию
Fire Monkey от А до Я
  • 0

Ошибка InputBox...


HyperZen

Вопрос

Добрый день!

При использовании диалога InputBox, при нажатии на кнопку "Отмена" - приложение вылетает без каких-либо ошибок под Андроид (по кнопке ОК - проблем вообще никаких нет). В Windows все работает корректно. Кто-нибудь сталкивался с такой проблемой?

  InputBox('Введите номер страницы', '', '',
    procedure(const AResult: TModalResult; const AValue: string)
      begin
        case AResult of
          mrOk:
            begin
              // тут выполняю какие-то действия
            end;
          mrCancel:
            begin
              // тут ничего не делаем
            end;
        end;
      end
    );

Использую Berlin...

Изменено пользователем HyperZen
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

ну, для начала берлин пишет на доступном языке

[dcc32 Warning] Unit1.pas(44): W1000 Symbol 'InputBox' is deprecated: 'Use FMX.DialogService methods'

во вторых

конечно, налицо просто баг в FMX.Dialogs

но, если последовать совету компилятора то вот так

    TDialogservice.InputQuery('Введите номер страницы', ['Ввод'], [''],
    procedure(const AResult: TModalResult; const AValues: array of string)
      begin
        case AResult of
          mrOk:
            begin
              e1.text:=avalues[0];
            end;
          mrCancel:
            begin
              e1.text:='Отмена';
            end;
        end;
      end
    );

отлично запустилось и сработало

Ссылка на комментарий
  • 0
1 час назад, krapotkin сказал:

ну, для начала берлин пишет на доступном языке

[dcc32 Warning] Unit1.pas(44): W1000 Symbol 'InputBox' is deprecated: 'Use FMX.DialogService methods'

Как-то странно все это, на InputBox - Berlin пишет, что устарел, а на InputQuery - нет, хотя, если взглянуть на:

http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Dialogs.InputQuery , то:

Warning: InputQuery is deprecated. Please use Platform.IFMXDialogServiceAsync.MessageDialogAsync.

Ссылка на комментарий
  • 0

http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Platform.IFMXDialogServiceAsync.InputQueryAsync

Или я туплю, или я не могу использовать InputQueryAsync... Есть у кого рабочий пример с использованием данной процедуры?

Ссылка на комментарий
  • 0
2 часа назад, krapotkin сказал:

отлично запустилось и сработало

Только что проверил, поведение такое же, как и при использовании InputBox - при нажатии кнопки "Отмена" приложение просто вылетает без ошибок.

Ссылка на комментарий
  • 0
5 часов назад, krapotkin сказал:

в посте я привел точно рабочий код, проверил

uses  FMX.DialogService

Действительно работает, огромное спасибо!

Открытие для меня было вчера - оказывается InputQuery есть и в FMX.Dialogs и в FMX.DialogService...

При использовании InputQuery из FMX.Dialogs в Андроиде - ошибка, при использовании FMX.DialogService - ошибки нет. Надо запомнить.

Ссылка на комментарий
  • 0

Кому интересно, вот ссылка с примерами со всеми deprecated диалогами и InputBox'ами: http://c2design5sh.blogspot.ru

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.ListBox, FMX.Layouts,
  FMX.Platform, FMX.StdCtrls, FMX.Controls.Presentation, FMX.DialogService, FMX.ScrollBox, FMX.Memo;

type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    Label1: TLabel;
    ListBox1: TListBox;
    ListBoxItem1: TListBoxItem;
    ListBoxItem2: TListBoxItem;
    ListBoxItem3: TListBoxItem;
    ListBoxItem4: TListBoxItem;
    ListBoxItem5: TListBoxItem;
    ListBoxItem6: TListBoxItem;
    Memo1: TMemo;
    procedure ListBoxItem1Click(Sender: TObject);
    procedure ListBoxItem2Click(Sender: TObject);
    procedure ListBoxItem3Click(Sender: TObject);
    procedure ListBoxItem4Click(Sender: TObject);
    procedure ListBoxItem5Click(Sender: TObject);
    procedure ListBoxItem6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

// uses  FMX.Platform, FMX.DialogService
//**************************************************************************************************
procedure TForm1.ListBoxItem1Click(Sender: TObject);
var
  ASyncService : IFMXDialogServiceASync;
begin
  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (ASyncService)) then
  begin
    ASyncService.ShowMessageAsync ( ( Sender as TListBoxItem ).Text );
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'ShowMessageAsync Displayed' );
end;


procedure TForm1.ListBoxItem2Click(Sender: TObject);
var
  SyncService : IFMXDialogServiceSync;
begin
  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (SyncService)) then
  begin
    SyncService.ShowMessageSync ( ( Sender as TListBoxItem ).Text );
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'ShowMessageSync Displayed' );
end;

//**************************************************************************************************
procedure TForm1.ListBoxItem3Click(Sender: TObject);
var
  ASyncService : IFMXDialogServiceASync;
  caption, inData : array[0..1] of string;
begin
  caption[0]   := 'ID :';
  caption[1] := #1 + 'Pass :';  // #1 앞에 붙이면 마스킹 기능

  inData[0] := 'admin';  // 초기값
  inData[1] := '1234';

  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface (ASyncService)) then
  begin
    ASyncService.InputQueryAsync( 'Input String', caption, inData,
      procedure (const AResult : TModalResult; const AValues : array of string)
      begin
         case AResult of
           mrOk: ( Sender as TListBoxItem ).Text := AValues[0] + '/' + AValues[1];
         end;
      end );
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'InputQueryAsync Displayed' );
end;


procedure TForm1.ListBoxItem4Click(Sender: TObject);
var
  SyncService : IFMXDialogServiceSync;
  caption, inData : array[0..1] of string;
begin
  caption[0]   := 'ID :';
  caption[1] := #1 + 'Pass :';  // #1 앞에 붙이면 마스킹 기능

  inData[0] := 'admin';  // 초기값
  inData[1] := '1234';

  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceSync, IInterface(SyncService)) then
  begin
    if SyncService.InputQuerySync( 'Input String', caption, inData ) then
       ( Sender as TListBoxItem ).Text := inData[0] + '/' + inData[1];
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'InputQuerySync Displayed' );
end;


//**************************************************************************************************
procedure TForm1.ListBoxItem5Click(Sender: TObject);
var
  ASyncService : IFMXDialogServiceASync;
begin
  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceAsync, IInterface(ASyncService)) then
  begin
    ASyncService.MessageDialogAsync( 'Question ?', TMsgDlgType.mtConfirmation,
                                                   [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0,
     procedure(const AResult: TModalResult)
     begin
       case AResult of
         mrYES : ( Sender as TListBoxItem ).Text := 'YES';
       end;
     end);
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'MessageDialogAsync Displayed' );
end;


procedure TForm1.ListBoxItem6Click(Sender: TObject);
var
  SyncService : IFMXDialogServiceSync;
  rValue, i : integer;
begin
  if TPlatformServices.Current.SupportsPlatformService (IFMXDialogServiceSync, IInterface(SyncService)) then
  begin
    rValue :=  SyncService.MessageDialogSync( 'Question ?', TMsgDlgType.mtConfirmation,
                                             [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0 );

    ( Sender as TListBoxItem ).Text := rValue.ToString;
  end;

  Memo1.Lines.Clear;
  Memo1.Lines.Add( 'MessageDialogSync Displayed' );
end;

end.

 

Изменено пользователем HyperZen
Ссылка на комментарий
  • 0
В 12.06.2016 в 10:56, HyperZen сказал:

Кому интересно, вот ссылка с примерами со всеми deprecated диалогами и InputBox'ами: http://c2design5sh.blogspot.ru

Что-то в InputQueryAsync и InputQuerySync не работают кнопки кроме "OK".

И клавиши Escape и Enter работают не везде.

Кто-нить знает, это лечится?

Ссылка на комментарий
  • 0

ну и очередная шутка от Delphi 11 под iOS:

image.png.1fc966bbd6d1bb98c3457e9068149a15.png

Если нажать на кнопку OK, AResult вернет значение mrCancel... а если на кнопку Cancel, AResult вернет mrOk...  удачного дня!

UPD: Исправлено в Delphi 11.2

Изменено пользователем slav_z
fix
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...