Перейти к содержанию
  • Регистрация

Активность

Лента обновляется автоматически     

  1. Сегодня
  2. Всем привет! В общем удалил я keystore файл. Естественно обновление не приняли по другому, сгенеренному. Написал им в поддержку, что мол извините, не нарочно удалил. Они ответили: Все делал как написали и отправил им РЕМ файл. Получил ответ уже на Русском: А теперь сижу и думаю... А что мне с этим счастьем делать?.... Как я понял, keystore файл должен как-то соотноситься с сертификатом, который я им отправил. Но вот как его получить из jks и РЕМ файлов нигде не нашел. Кто-нибудь сталкивался с такой ситуацией?
  3. Вчера
  4. Возможно Вы отправили запрос до 1 октября?
  5. Скачал и тестировал проект на Delphi 10.3.1. Оболочка при компиляции выдала 2 ошибки : unit superobject - не знает DecimalSeparator, для запуска по быстрому вписал в коснтанты, и unit SuperForm - строка где A := WebCamera.GetAvailableCaptureSettings там нужно передать TCanvasClass, я закоментировал временно. После этого приложение запустилось. Target windows 32-bit
  6. Еще, причем, если будете запускать не только на Windows, сразу выберете кросплатформенного поставщика (DOM Vendor) ADOM XML v4 Тогда не надо будет вызывать CoInitialize, который и работает только для Windows
  7. Приветствую. Имеется необходимость получить список всех видимых (GUI) компонентов, установленных в Delphi. Я видел где-то, что можно как-то попробовать через ToolsAPI это сделать, но ничего толкового на эту тему так и не нашел. Может есть у кого мысли по этому поводу? Если возникнет вопрос: для чего тебе это? Ответ: Для приложения LivePreview, которое идет вместе со студией для того, чтобы видеть то, что размещаю на форме непосредственно на устройстве. Спасибо!
  8. Последняя неделя
  9. function IsEndScroll(ScrollBox: TCustomScrollBox): Boolean; begin Result:=ScrollBox.ViewportPosition.Y>=ScrollBox.ContentBounds.Height-ScrollBox.ClientHeight; end;
  10. А это означает, что в этом потоке Вы не вызвали CoInitialize, прежде чем работать с XML
  11. Светлана, вот как делаю я: procedure TMainClient.ОбновитьДанныеВПотоке begin TThread.CreateAnonymousThread(procedure () begin TThread.Synchronize (nil, //Из потока обращаемся к контролам только через главгый поток procedure () begin Показываем котролы запускаем мультик end); Выполняем обработку данных без использования визуальных элементов TThread.Synchronize(nil, procedure () begin Выполняем остановку мультика скрываем контролы end); end).Start; end;
  12. "Курите" мануалы! Купите книжку "Delphi High Performance" в конце концов, там хорошо все разжевано! На YouTube есть множество роликов о том как правильно делать... Все видимое выполняйте в главном потоке, все вычисления, запросы, обработку выносите в потоки и будет Вам счастье Анатолий Светлана!
  13. А если я ловлю ошибку иногда "Exception class DOMException with message 'Microsoft MSXML is not installed'" - это значит, что то типа потоку не доступна та или иная lib для выполнения?
  14. Да, извините - забыл, конечно надо TThread.CreateAnonymousThread(procedure begin ... end).Start, ведь он создаётся как Suspended Я их довольно часто использовал (пока не перешёл на работу с TTask), всегда всё отрабатывало нормально. Пройдитесь по форумам или блогам, почитайте хелп А Вообще - в Вашем случае Image и таймер никогда не будет отрабатывать, пока GetDeD_List запускается в главном потоке
  15. Либо не работает вообще, либо пробую дописать .Start и выбивает ошибку. Логика ясна, начала перебирать варианты, но... меня терзают какие то смутные сомнения, что может ничего не получиться, потому что реакция на вложения еще хуже, чем ожидалось. Хотелось бы всё таки более ясный мануал за потоки к FMX, почитать, чтоб точно понять как они работают и на основе этого сделать как лучше, а не методом тыка костыли создавать.
  16. Ну правильно Вам логика подсказала, вот только в отдельном потоке надо запускать ВСЁ. Аля так: 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. Не проверял, но логика, я думаю, ясна
  17. Ну всё в принципе как всегда, либо я барашка, либо лыжи не едут) А всё просто - я хочу, чтобы пока данные с сервера загружались по клику кнопки, пользователю элементарно был отклик в виде крутящейся какой нибудь фигни и он видел, что процесс идёт и что прога не зависла и никуда лишний раз не тыкал. Пока что для тестов сделала элементарно кнопку 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, а там вот пара вариантов и норм на нём работают? Но чтот я никак не могу понять, что к чему... должно же быть как то просто, а я чтот никак не могу понять как(
  18. Господа, всем привет! Не подскажете, как определить, что вертикальный скролл опущен в самый низ списка?
  19. Просьба репостить их ответ. Очень интересно что ответят.
  20. Вроде с 1 октября разрешения перестали выдавать.
  21. А ответ на вопрос найден?
  22. "Соблюдая индекс сортировки" - это и есть "в том порядке в котором они отсортированы". Если есть порядок, то запросто можно добавлять. Кроме вроде есть методы и для перестановок тоже, если лень заново заполнять каждый раз. Хотя по мне это самое простое поэтому можете использовать что хотите, но работают эти компоненты по-разному
  23. ну, есть идеи, как бы модифицировать код, но и так сойдет я бы перефразировал if frmScanWindow = nil then frmScanWindow := TFrmScanWindow.Create(NIL); frmScanwindow.showModal( procedure (const AResult:TModalResult) begin if AResult = mrOK then begin ....... и может быть даже FreeAndNil(frmScanwindow); end; end);
  24. Простите за беспокойство, разобрался. Надо было в главной форме вместо такого 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
  25. Kast2k

    не отрабатывает TThread.synchronize

    Добрый день! 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.
  26. Для этого достаточно TGridLayout, мне то как раз нужно использовать сортировку "в процессе"))
  27. Вот моя переписка. Прислали вот такое письмо с вопросами Hello Alexey, Thanks for contacting Google Play Developer Support. Apologies for the delayed response. I understand you would like an extension to become 64-bit compliant. In order to submit your request, can you please provide the following: Reason for not being able to be compliant in time (if there’s a dependency on third party tools, please specify it) Reason for your request and your plan for migration Specific plan on how you will become compliant, with an estimation date for building 64-bit support that you can commit (For example: The app will be compliant 2 weeks after Embarcadero is compliant.) I look forward to your reply and assisting you further. Regards, Liz Google Play Developer Support я ответил так Hello Liz! Thank you for your letter. In answer to your questions, i provide that as soon as Embarcadero will make a 64x-compiler for Android, i will use it and make a compatible application. I hope, that it won't take long, i dont use any third party tools, only Embarcadero RAD Studio. I'm disappointed, that Embarcadero do not release a new version in time, like they still don't announce it. Also to this I want to ask, if i need to update my application in Google Play Market, i need to reques this extension every time, or only onсe? My application is made for users of our smart home system, and I'm very worried, that our new customers can't download it from Play Market, so I hope for a positive decision of my request!
  28. Ребя, сам разобрался. Спасибо всем переживающим Перенес апдейт листбокса туда, где он должен быть. Теперь кусочек стал выглядеть вот так: TThread.Synchronize(nil, procedure () begin lbTare.BeginUpdate; UpdateTareBalanceItems; Label7.Text := 'Обновлено'; lclCloseAnimationT; lbTare.EndUpdate; end); Теперь работает вот так: https://www.youtube.com/watch?v=XABighMePBo Если есть замечания по коду - поделитесь...
  1. Загрузить ещё активность
×
×
  • Создать...