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

[Android] Использование ACloseDialogProc в MessageDlg


brunnengi

Вопрос

Здравствуйте.

Я так понимаю что в XE7 есть возможность использовать MessageDlg, но для этого надо использовать ACloseDialogProc. Если кто знает как, то приведите пожалуйста пример использования MessageDlg с этим параметром.

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

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

  • 0

Коротко объясню....

ACloseDialogProc - это процедура-обработчик результатов, полученных при помощи MessageDlg, поскольку в этой версии RAD XE7 все диалоги являются не блокирующими, т.е. во время показа диалога, продолжается выполнение следующих строк кода.

 

Вам необходимо объявить новую процедуру, которая будет вызываться после нажатия любых кнопок в MessageDlg.

 

Т.е. будет что-то вроде

procedure TForm1.doSomethingWithDialogResult(const AResult: TModalResult);
begin

  if AResult=mrYes then begin
    {тут обработка нажатия кнопки Yes}
  end;

end;

а вызвать диалог необходимо следующим образом

MessageDlg('Тут текст сообщения', TMsgDlgType.mtConfirmation, mbYesNo, 0, doSomethingWithDialogResult);
Изменено пользователем ophion
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Похожий контент

    • Автор YPOK5C
      Добрый день ! Кто подсказки почему при компиляции приложения под Андроид через USB выдаёт такие ошибки, при этом все apk файлы создаётся все они рабочие.  Unable to crete process unable to install Failure install failed update incompatible

    • Автор notricky
      Возникает вышеозначенная ошибка при попытке декодировать приходящий от сервера текст.
      Я пробовал в различных вариантах.
      http://www.fmxexpress.com/secure-your-rest-client-with-ssl-and-gzip-compression-in-delphi-xe8-firemonkey-on-android-and-ios/
      http://www.fmxexpress.com/decode-gzip-content-from-the-rest-client-in-delphi-xe7-firemonkey-on-android-and-ios/  
       
      Я получаю либо  ошибку из названия темы, либо  Error on call to ZLib library function inflateInit2_

      В общем не работает только на iOS (iPhone).
      На Android, Windows, MacOS работает корректно декомпрессия в автоматическом режиме, потому вопроса о строках не возникает.
    • Автор notricky
      Собственно есть способ получать и распаковывать данные, полученные в GZIP.
      В качестве примера:
      procedure TFMain.FormCreate(Sender: TObject); begin (ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP).Compressor := TIdCompressorZLib.Create(ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP); ReqGet.AcceptEncoding := 'gzip,deflate'; ... end; А вот как их отправить (как запаковать - механизм? и куда подставить строку) - не понятно.
      Отправка интересует и POST и GET
      Прошу помощи.
    • Автор notricky
      Не нашел тега TPopup. Напишу тут.
      Ситуация в следующем. Я использую TPopup + TCalloutPanel для хинтов (подсказок). С анимацией FadeIn FadeOut.
      Все вроде просто.
      На основной форме есть стандартная проверка FormKeyDown
      if Key in [vkHardwareBack] then begin TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService)); if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then begin DebugLog('KeyboardOnBackButton'); end else begin Key := 0; if ItemLayout.Visible then begin DebugLog('ItemLayoutBackButton'); btCancelClick(btCancel); end else begin DebugLog('MainLayoutBackButton'); MessageDlg('Are you sure to exit now?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel], -1, procedure (const AResult: TModalResult) begin if AResult = mrOk then begin DebugLog('CloseOnBackButton'); Close; end; end); end; end; end В общем ничего сверхестественного.
      Затем, когда появляется хинт:
      procedure TFParent.ShowHint(AControl: TControl; AText: string; ATitle: string=''; Duration: single = 3; ImageIndex: integer = -1); begin DebugLog('ShowHint'); lbHint.Text := AText; puHint.PlacementTarget := AControl; faHintFadeOut.Delay := Duration; puHint.IsOpen := true; ivHint.Visible := ImageIndex <> -1; lbHintTitle.Text := ATitle; lbHintTitle.Visible := ATitle <> ''; end; все тоже хорошо. Однако, когда я нажимаю кнопку назад - сначала пропадает хинт. А если я нажимаю снова кнопку назад, то вообще говоря я жду два варианта:
      ItemLayout переходит в MainLayout Программа запрашивает выход MessageDlg Но на деле приложение просто закрывается. При чем без ошибок.
      Что с этим можно сделать?
    • Автор Alexey Shumkin
      Для работы с USB-устройствами (на девайсах с USB-хостом) нужно использовать BroadcastReceiver.
      Нашёл пример работы с ними (https://github.com/freeonterminate/delphi/tree/master/BroadcastReceiver). 
      Проверял на XE10. Долго мучался с проверкой, пока не выяснилось, что под XE7 работает, а под XE10 - нет.
      Выдаёт ошибку "Interface not supported" в момент создания JFMXBroadcastReceiver (или около того, точно непонятно).
      Для демонстрации я создал отдельный простой проект - https://github.com/ashumkin/Delphi-Android-BroadcastSample.
      В XE7 он работает (при нажатии на кнопку Register вешается слушатель, который ловит и выводит в лог (см. adb logcat) события включения/выключения экрана). А в XE10 - выдаёт вышеупомянутую ошибку "Interface not supported".
      В логах есть строки
      W/dalvikvm(31735): dvmFindClassByName rejecting 'com/embarcadero/firemonkey/broadcast/FMXBroadcastReceiverListener'
      W/dalvikvm(31735): dvmFindClassByName rejecting 'com/embarcadero/firemonkey/broadcast/FMXBroadcastReceiver'
      (но они есть и при запуске приложения, собранного в XE7)
      Пробовал по-разному: и удалял AndroidManifest.template.xml от XE7, и пересоздавал .dproj в XE10, - пофик.
      В чём засада?
    • Автор Fabiano da Silva
      как создать чат между людьми
      Android Делфи? может кто-нибудь помочь?
    • Автор Morfi
      Среда XE8 стоит на Win 8,1. Приложение запускается.
       
      Переношу приложение на клиентскую машину с Win 7. Запускаю - вылетает такая ошибка:

       
      А после, это:

       
      Привожу код, который выполняется при начале отображения формы:
      procedure TForm1.FormShow(Sender: TObject); var StrTemp: TStrings; begin try StrTemp := TStringList.Create; DM1.FDConnection1.Params.Database := ExtractFileDir(ParamStr(0))+'\data\flatcom.db'; DM1.FDConnection1.Connected := True; DM1.FDTable1.Active := true; DM1.GetAdmins(StrTemp); self.edtAdmin.Items := StrTemp; edtAdmin.Items.Count; StrTemp.Clear; DM1.GetNationals(StrTemp); self.edtNationality.Items := StrTemp; StrTemp.Clear; DM1.GetRoomsType(StrTemp); self.edtRoomType.Items := StrTemp; StrTemp.Clear; DM1.GetCalcs(StrTemp); self.edtCalc.Items := StrTemp; StrTemp.Free; self.dtdtContract.Date := Date; Self.edtNumContract.SetFocus; Self.edtNumContract.SelectAll; except ShowMessage('Файл базы данных не найден. Обратитесь к разработчику.'); Self.Close; end; end; Ошибка, явно в этом месте:
      DM1.FDConnection1.Params.Database := ExtractFileDir(ParamStr(0))+'\data\flatcom.db'; DM1.FDConnection1.Connected := True; Если можете, скажите, в чем может быть проблема?
    • Автор Morfi
      Всем доброго времени суток.
       
      На форме есть TGrid:
       

       
      Данные к нему прикручены через LiveBinding от TFDQuery:
       

       
      Как мне узнать значение ячейки первого столбца, активной строки?
       

       
      Пробовал реализовать через событие Grid1SelectCell:
      procedure TForm5.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; var CanSelect: Boolean); var CellStr: string; //Значение ячейки первого столбца. begin CellStr := TTextCell(Grid1.Columns[0].Controls.Items[ARow]).Text; end; Вот этот код:
      TTextCell(Grid1.Columns[0].Controls.Items[ARow]).Text; я вычитал здесь: http://fire-monkey.ru/topic/120-tgrid-kak-ustanovit-tekst-v-iacheike-tcheckcolumn-delphi-xe-4/
      Однако, при его выполнение срабатывает исключение: "argument out of range".
       
      Подскажите, как мне решить эту задачу?
       
      Версия среды: XE7 FMX.
    • Автор Рагим
      Добрый день.
       
      Есть необходимость создать из приложения под Андроид точку доступа на телефоне. После этого получить список IP-адресов подключенных устройств. Если кто-то знает каким образом можно это реализовать, пожалуйста помогите.
  • Последние посетители   0 пользователей онлайн

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

×
×
  • Создать...