Перейти к содержанию
  • Регистрация
  1. Общие вопросы

    1. 511
      сообщение
    2. 1 408
      сообщений
    3. 885
      сообщений
    4. Базы данных и REST

      Работа с базами данных и с REST из FireMonkey

      1 492
      сообщения
    5. 9 458
      сообщений
    6. Положение, размеры, выравнивание

      Положение контролов, размеры, способы выравнивания, абсолютные, локальные и экранные координаты

      420
      сообщений
    7. Работа с текстом

      Текстовые настройки, шрифты, отображение

      391
      сообщение
    8. Приложение и формы

      Настройки приложения и работа с формами

      1 278
      сообщений
    9. Отладка

      Вопросы отладки и логирования delphi приложений. Поиск ошибок.

      422
      сообщения
    10. Развертывание приложений

      Deployment Manager, копирование своих файлов на устройство при установке приложения, подготовка к публикации, распространение.

      555
      сообщений
    11. 1 006
      сообщений
    12. Общая информация о TControl

      Общая информация о TControl, на основе которого строятся все остальные визуальные компоненты FireMonkey

      75
      сообщений
    13. 276
      сообщений
    14. Прочие вопросы

      Если нет соответствующего раздела форума, то сюда публикуем свой вопрос, затем тема перейдет в нужный раздел форума.

      2 827
      сообщений
  2. Вопросы по платформам

    1. 6 202
      сообщения
    2. 1 632
      сообщения
    3. OSX

      186
      сообщений
    4. 698
      сообщений
    5. 6
      сообщений
    6. 55
      сообщений
  3. Вопросы по использованию RAD Studio

    1. Лицензирование

      Вопросы связанные с редакциями RAD Studio и лицензированием

      149
      сообщений
    2. 128
      сообщений
    3. 13
      сообщений
    4. 24
      сообщения
    5. 281
      сообщение
  4. Native FGX

    1. Новости

      Официальные новости с полей разработки новой кроссплатформенной нативной мобильной библиотеки Native FGX.

      181
      сообщение
    2. 29
      сообщений
    3. Предложения

      В этом разделе каждый может:

      1. Предложить идею о необходимости добавить тот или иной компонент в библиотеку
      2. Поделиться мыслями, чего не хватает, что было бы здорово добавить.
      3. Ваше мнение о существующих проблемах.
      • Сообщений пока нет
  5. Обучение

    1. 35
      сообщений
    2. 150
      сообщений
      • Сообщений пока нет
  6. Поиск специалистов по FireMonkey

    1. Консультации

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

      616
      сообщений
    2. Ищу подрядчика

      В этом разделе заказчики ищут подрядчиков для разовых/проектных работ на FireMonkey

      67
      сообщений
  7. Дополнительные ресурсы по FireMonkey

    1. Сторонние компоненты

      Раздел для публикации существующих компонентов для FireMonkey

      858
      сообщений
    2. Приложения, написанные с использованием FireMonkey

      Подборка ссылок на приложения, написанные с использование FireMonkey и RAD Studio

      329
      сообщений
    3. Примеры

      Подборка ссылок на официальные примеры

      9
      сообщений
    4. Руководства

      Книги, брошюры по FireMonkey

      61
      сообщение
    5. Шаблоны

      Шаблонные проекты

      156
      сообщений
    6. Статьи и заметки

      Публикация ссылок на интересные стать о Delphi и FireMonkey. Каждый пользователь может поделиться здесь своими ссылками.

      370
      сообщений
    7. Информация о версиях RAD Studio

      Информация о новых возможностях, появившихся в каждый версиях RAD Studio. А так же исправлениях и улучшениях

      737
      сообщений
    8. 487
      сообщений
  8. Организация работы данного форума

    1. 1
      сообщение
    2. Нарушения правил форума

      Сюда попадают темы, не отвечающие правилам форума

      23
      сообщения
    3. 149
      сообщений
    4. 89
      сообщений
    5. Функции форума

      Инструкции по использованию функций форума и оповещение о новых функциях

      19
      сообщений
  9. Видеокурсы

    1. Основная информация

      Основная информация о составе курсов, их формате и организационных вопросах.

      50
      сообщений
    2. Курсы

      Список текущих и планируемых курсов по FireMonkey

      4
      сообщения
    3. Предложения и голосования за новые курсы

      Здесь каждый пользователь может предложить тему курсов, в которой он заинтересован,  или проголосовать за уже предложенные.

      26
      сообщений
    4. 24
      сообщения
  • Статистика пользователей

    4 107
    Пользователей
    1 611
    Максимум онлайн
    Urik
    Новый пользователь
    Urik
    Регистрация
  • Кто в онлайне   1 пользователь, 0 анонимных, 96 гостей (Посмотреть всех)

  • Native FGX

  • Последние сообщения

    • "Курите" мануалы! Купите книжку "Delphi High Performance" в конце концов, там хорошо все разжевано! На YouTube есть множество роликов о том как правильно делать... Все видимое выполняйте в главном потоке, все вычисления, запросы, обработку выносите в потоки и будет Вам счастье Анатолий Светлана!
    • А если я ловлю ошибку иногда "Exception class DOMException with message 'Microsoft MSXML is not installed'" - это значит, что то типа потоку не доступна та или иная lib для выполнения?
    • Да, извините - забыл, конечно надо TThread.CreateAnonymousThread(procedure begin ... end).Start, ведь он создаётся как Suspended Я их довольно часто использовал (пока не перешёл на работу с TTask), всегда всё отрабатывало нормально. Пройдитесь по форумам или блогам, почитайте хелп   А Вообще - в Вашем случае Image и таймер никогда не будет отрабатывать, пока GetDeD_List запускается в главном потоке
    • Либо не работает вообще, либо пробую дописать .Start и выбивает ошибку. Логика ясна, начала перебирать варианты, но... меня терзают какие то смутные сомнения, что может ничего не получиться, потому что реакция на вложения еще хуже, чем ожидалось. Хотелось бы всё таки более ясный мануал за потоки к FMX, почитать, чтоб точно понять как они работают и на основе этого сделать как лучше, а не методом тыка костыли создавать.
    • Ну правильно Вам логика подсказала, вот только в отдельном потоке надо запускать ВСЁ. Аля так: TThread.CreateAnonymousThread(procedure begin TThread.ForceQueue(TThread.Current, procedure begin P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; end); GetDeD_List(DE_set.Date); TThread.ForceQueue(TThread.Current, procedure begin P_showLoad.Visible := False; Timer_load_rotate.Enabled := False; end); end); P.S. Не проверял, но логика, я думаю, ясна
    • Ну всё в принципе как всегда, либо я барашка, либо лыжи не едут) А всё просто - я хочу, чтобы пока данные с сервера загружались по клику кнопки, пользователю элементарно был отклик в виде крутящейся какой нибудь фигни и он видел, что процесс идёт и что прога не зависла и никуда лишний раз не тыкал. Пока что для тестов сделала элементарно кнопку Update (speedbutton с image), данные элементарно грузятся и отображаются в GridPanel, а поверх него, чтоб пользователь и не смог куда либо тыкнуть, замостила панелькой с Image, вращаемой по таймеру (всё это дело наверху Visible:=false). И когда клацаем по кнопке Update, то панельку сверху грида делаю отображаемой и запускаю таймер, потом этот же обработчик/процедура грузит данные, а по окончанию останавливаем таймер и скрываем полупрозрачну, еще кстати, панельку. Аля вот так: procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin //отображаем лого загрузки P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; //с запуском таймера GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется //и скрывае лого загрузки Timer_load_rotate.Enabled := false; //уже в обратном порядке P_showLoad.Visible := false; end; иии... ни черта не происходит как я хочу( Это лого вообще в итоге не отображается, а если убрать его скрытие, то оно у нас отобразится уже только тогда, когда всё загрузится. Логика мне стала подсказывать, что следовало его как то отобразить выполнив в параллельном асинхронном потоке аля так: procedure TForm1.SB_DataUpdateClick(Sender: TObject); begin TThread.Queue(TThread.Current, //TThread.Queue TThread.Synchronize ForceQueue procedure() begin P_showLoad.Visible := true; Timer_load_rotate.Enabled := true; end); GetDeD_List(DE_set.Date); //процедура загрузки и отображения чего нам надо, которая весьма долго выполняется end; И опять оно отображается только после того, как всё загрузится и проработает вся процедура. И уже чего только не пробовала и Synchronize и ForceQueue; и через TTask.Run и |task := TTask.Create(procedure () ... и т.д.| ничего не подходит, вот хоть убейся это всё дело будет отображаться только после полной отработки процедуры клика. Может я не в том направлении вообще рою и это как то по другому делается? Может я еще пока отлаживаю на Win32, а не всё на android, а там вот пара вариантов и норм на нём работают? Но чтот я никак не могу понять, что к чему... должно же быть как то просто, а я чтот никак не могу понять как(
    • Господа, всем привет! Не подскажете, как определить, что вертикальный скролл опущен в самый низ списка?
    • Просьба репостить их ответ. Очень интересно что ответят.
    • Вроде с 1 октября разрешения перестали выдавать.
    • "Соблюдая индекс сортировки" - это и есть "в том порядке в котором они отсортированы". Если есть порядок, то запросто можно добавлять. Кроме вроде есть методы и для перестановок тоже, если лень заново заполнять каждый раз. Хотя по мне это самое простое поэтому можете использовать что хотите, но работают эти компоненты по-разному
    • ну, есть идеи, как бы модифицировать код, но и так сойдет я бы перефразировал if frmScanWindow = nil then   frmScanWindow := TFrmScanWindow.Create(NIL); frmScanwindow.showModal( procedure (const AResult:TModalResult) begin if AResult = mrOK then begin ....... и может быть даже FreeAndNil(frmScanwindow); end; end);  
    • Простите за беспокойство, разобрался. Надо было в главной форме вместо такого   var f:TfrmScanWindow; begin f:=TfrmScanWindow.Create(nil); try f.Show; finally // FreeAndNil(f); end; Указать как begin frmScanWindow:=TfrmScanWindow.Create(nil); try frmScanWindow.Show; finally end; И форму выкинуть из auto-create
    • Добрый день! Delphi 10.2 Tokyo. С FMX разбираюсь всего пару-тройку недель и возможно пока не понимаю его принципов работы. Есть сканер на андроиде Honeywell. В FMX рисую для него приложение по получению и обработке штрих-кодов. Есть основная форма и вспомогательная (принимающая данные со сканера). Дочернюю форму вызываю так: procedure TMainForm.btnSaveToStoreClick(Sender: TObject); var f:TfrmScanWindow; begin f:=TfrmScanWindow.Create(Application); try f.Show; finally // FreeAndNil(f); end; end; Далее, в дочерней форме следующий код:   type JNativeActivitySubclass = interface; JNativeActivitySubclassClass = interface(JActivityClass) ['{829C77FB-08F1-4D19-9782-3C58EECAAAAA}'] {Methods} //function init: JFMXNativeActivity; cdecl; end; [JavaSignature('com/winarhi/nativeactivitysubclass/NativeActivitySubclass')] JNativeActivitySubclass = interface(JActivity) ['{2FA559EC-D1D7-46AA-9C52-FEFC6B3AAAAA}'] {Methods} procedure WA_75e_DoScan; procedure WA_75e_Create_aidcManager; procedure WA_75e_Destroy_aidcManager; end; TJNativeActivitySubclass = class(TJavaGenericImport<JNativeActivitySubclassClass, JNativeActivitySubclass>) end; TfrmScanWindow = class(TForm) Label1: TLabel; MemoData: TMemo; btnAgree: TButton; btnCancel: TButton; btnFinish: TButton; Panel1: TPanel; Panel2: TPanel; Timer1: TTimer; procedure btnFinishClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } ARNBarCode : string; procedure MemoAddText(const AText:string); public { Public declarations } procedure ActivateScanner; procedure RegisterDelphiNativeMethods; procedure onBarCodeCompleteThreadSwitcher; procedure onBarCodeFailThreadSwitcher; end; var frmScanWindow: TfrmScanWindow; implementation uses FMX.Helpers.Android, Androidapi.NativeActivity, formScanComplete; {$R *.fmx} procedure onBarCodeCompleteNative(PEnv: PJNIEnv; This: JNIObject; BarCode: JNIString); cdecl; begin frmScanWindow.MemoAddText('onBarCodeCompleteNative start'); // НЕ работает TThread.Synchronize(TThread.CurrentThread, procedure() begin frmScanWindow.MemoData.Lines.Add('onBarCodeCompleteNative start'); frmScanWindow.MemoData.Repaint; end); // НЕ работает // Log.d('Thread (Main: %.8x, Current: %.8x, Java:%.8d (%2:.8x), POSIX:%.8x)', // [MainThreadID, TThread.CurrentThread.ThreadID, TJThread.JavaClass.currentThread.getId]); frmScanWindow.ARNBarCode := JNIStringToString(PEnv, BarCode); // работает TThread.Synchronize(TThread.CurrentThread, frmScanWindow.onBarCodeCompleteThreadSwitcher); // НЕ работает end; procedure onBarCodeFailNative(PEnv: PJNIEnv; This: JNIObject; BarCode: JNIString); cdecl; begin frmScanWindow.MemoAddText('onBarCodeFailNative start'); // НЕ работает // Log.d('Thread (Main: %.8x, Current: %.8x, Java:%.8d (%2:.8x), POSIX:%.8x)', // [MainThreadID, TThread.CurrentThread.ThreadID, TJThread.JavaClass.currentThread.getId]); frmScanWindow.ARNBarCode := JNIStringToString(PEnv, BarCode); // работает // Log.d('Calling Synchronize'); TThread.Synchronize(TThread.CurrentThread, frmScanWindow.onBarCodeFailThreadSwitcher); // НЕ работает end; procedure TfrmScanWindow.ActivateScanner; begin RegisterDelphiNativeMethods; TJNativeActivitySubclass.Wrap(PANativeActivity(System.DelphiActivity)^.clazz).WA_75e_Create_aidcManager; MemoAddText('Activated'); // работает end; procedure TfrmScanWindow.FormShow(Sender: TObject); begin MemoAddText('Pre-activate'); // работает ActivateScanner; end; procedure TfrmScanWindow.MemoAddText(const AText: string); begin MemoData.Lines.BeginUpdate; try MemoData.Lines.Add(AText); finally MemoData.Lines.EndUpdate; end; end; procedure TfrmScanWindow.onBarCodeCompleteThreadSwitcher; begin MemoAddText('onBarCodeCompleteThreadSwitcher'); // НЕ работает MemoAddText(ARNBarCode); // НЕ работает ShowMessage(ARNBarCode); // работает end; procedure TfrmScanWindow.onBarCodeFailThreadSwitcher; begin MemoAddText('onBarCodeFailThreadSwitcher'); // НЕ работает MemoAddText('Barcode Scan Failed ' + ARNBarCode); // НЕ работает end; procedure TfrmScanWindow.RegisterDelphiNativeMethods; var PEnv: PJNIEnv; ActivityClass: JNIClass; NativeMethods: array[0..1] of JNINativeMethod; begin Log.d('Starting the registration JNI stuff'); PEnv := TJNIResolver.GetJNIEnv; Log.d('Registering interop methods'); NativeMethods[0].Name := 'onBarCodeCompleteNative'; NativeMethods[0].Signature := '(Ljava/lang/String;)V'; NativeMethods[0].FnPtr := @onBarCodeCompleteNative; NativeMethods[1].Name := 'onBarCodeFailNative'; NativeMethods[1].Signature := '()V'; NativeMethods[1].FnPtr := @onBarCodeFailNative; ActivityClass := PEnv^.GetObjectClass( PEnv, PANativeActivity(System.DelphiActivity).clazz); PEnv^.RegisterNatives(PEnv, ActivityClass, @NativeMethods[0], 2); PEnv^.DeleteLocalRef(PEnv, ActivityClass); Log.d('Interop Methods Registered'); end; procedure TfrmScanWindow.Timer1Timer(Sender: TObject); begin MemoAddText(FormatDateTime('hh:nn:ss',Now)); // работает end; Поясните, пожалуйста, что я делаю не так. Если весь этот код вызывать в основной форме, то всё работает и в memo я вижу полученные данные баркода. При вызове из дочерней - нет. При попытке вызвать ShowModal я получаю ошибку Not implemented for this platform.  
    • Для этого достаточно TGridLayout, мне то как раз нужно использовать сортировку "в процессе"))
  • Последние темы

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