zekelive
-
Постов
133 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные zekelive
-
-
7 минут назад, dnekrasov сказал:
В Synchronize надо заключать КАЖДОЕ обращение к визуальной части. Вы же этого не сделали (если я правильно понял код), или сделали частично. К тому же у Вас столько строк надо синхронно делать, что я просто не вижу смысла в таком потоке. Мой Вам совет - меняйте логику.
Под заменой логики, что имеете в виду? У меня просто в голове других вариантов нет
-
Коллеги, здравствуйте. Помогите пожалуйста с работой потоков. При запуске потока, появляется индикатор и исправно крутится. В какой то момент он залипает и перестает крутиться и так до конца работы потока. Понимаю, что в потоке идет работа с визуальными компонентами, по этому скорее всего и залипает индикатор. Как исправить/оптимизировать код? Спасибо.
DelOff = class (TThread) protected FOnTaskStarted: TThreadMethod; FOnTaskFinished: TThreadMethod; procedure DoStarted; procedure DoFinished; procedure load; procedure Execute; override; public property OnTaskStarted: TThreadMethod read FOnTaskStarted write FOnTaskStarted; property OnTaskFinished: TThreadMethod read FOnTaskFinished write FOnTaskFinished; end; procedure DelOff.DoFinished; begin Add.Layout1.Visible:=false; if Assigned (Add.FindComponent('Null') as TLayout) then (Add.FindComponent('Null') as TLayout).Free; end; procedure DelOff.DoStarted; begin Add.Layout1.Visible:=true; end; procedure DelOff.load; begin try ReOpen; ClientModule2.ServerMethods1Client.Number13(a,b,g,h); a:='1'; ReOpen; offerlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); a:='2'; ReOpen; sumofferlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); a:='3'; ReOpen; keyofferlist1.Lines.Text:=ClientModule2.ServerMethods1Client.Number12(a,b,g,h); ReOpen; offercount:=ClientModule2.ServerMethods1Client.Number11(a,b,g,h); except ANM.Show; Add.Visible:=false; ShowmessageToast('Ошибка загрузки',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; end; procedure DelOff.Execute; begin inherited; //Удаление из БД продукта try try Synchronize(DoStarted); updatecount:=StringReplace((Add.FindComponent('LabelIntro') as TLabel).Hint, 'Rec', '', [rfReplaceAll]); a:=(Add.FindComponent('NameProduct'+updatecount) as TLabel).Hint; di:= TZDeviceInfo.Create; b:=StringReplace(di.DeviceID, '=', '', [rfReplaceAll]); if(internet='true') and (server='true') then begin EditCase:='false'; Add.PSB.AutoCalculateContentSize:=false; Add.PSB.EnabledScroll:=true; Add.PSB.AutoCalculateContentSize:=true; synchronize(load); if Assigned (Add.FindComponent((Add.FindComponent('LabelDel') as TLabel).Hint)) then begin (Add.FindComponent((Add.FindComponent('LabelDel') as TLabel).Hint) as TRectangle).Free; (Add.FindComponent('RecEdit') as TRectangle).Free; end; Add.PSB.ScrollTo(0,0,true); for countload:=0 to StrToInt(offercount)-1 do begin (Add.FindComponent('XRun'+IntToStr(countload)) as TFloatAnimation).Enabled:=false; (Add.FindComponent('x'+IntToStr(countload)) as TImage).Opacity:=0; (Add.FindComponent('VRun'+IntToStr(countload)) as TFloatAnimation).Enabled:=false; (Add.FindComponent('v'+IntToStr(countload)) as TImage).Opacity:=0; end; end else begin ShowmessageToast('Нет интернета',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; finally Synchronize(DoFinished); end; except ANM.Show; Add.Visible:=false; ShowmessageToast('Ошибка загрузки',TJToast.JavaClass.LENGTH_LONG); Value := Trim('10,500'); if Add.CheckPermission then if Value.Contains(',') then TVibratorHelper.vibrate(Value.Split([',']), -1) else TVibratorHelper.vibrate(Value.ToInt64); end; end;
-
Коллеги, туплю. Очистка обычного TScrollBox происходит отлично таким кодом:
Assert(ANM.VSB <> nil); TOpenScrollBox(ANM.VSB).Content.DeleteChildren; ANM.VSB.Repaint;
Как очистить от наследников TPresentedScrollBox?
-
15 минут назад, krapotkin сказал:
это связано с проблемами масштабирования на дурацких скейлах обычно от Samsung
попробуйте задать размер фонта больше/меньше на 0.1 или 0.01
Спасибо, попробую.
-
-
Понял. Спасибо за отклик) буду пилить в два окошка.
-
Коллеги, подскажите пожалуйста. Есть ли возможность множественного выбора дат в данном компоненте или другой компонент с таким функционалом?
-
Коллеги, подскажите, с TMapVIew что то изменилось в настройках? Перешел на версию 10.4 Android и понадобилась снова работа с картами. Как обычно получил apikey добавил Maps Service в настройках RAD, все разрешения дал на геолокацию и Ничего. Приложение падает при создании TMapVIew; Код крайне банален:
procedure TGeo.Button3Tap(Sender: TObject; const Point: TPointF); var map:TMapView; begin map:=TMapVIew.Create(Geo); map.Parent:=Geo; map.Align:=TAlignLayout.Client; end;
Что снова не так и куда смотреть?
-
2 часа назад, Slym сказал:
Кстати подобная ошибка у меня иногда выходит при повороте окна со сложным интерфейсом...
Возможно ваш вопрос и решите так же через компилятор android x64
-
Спасибо всем. Проблему решил компилятором на Андроид x64. Так как для приложений под 10 Андроид есть куча особенностей.
-
17 минут назад, zekelive сказал:
Проверил на более старой версии андроида работает. на 8 андроиде. у меня 10 на другом смартфоне. Копать в сторону SDK?
Обновил SDK не помогло.
-
Проверил на более старой версии андроида работает. на 8 андроиде. у меня 10 на другом смартфоне. Копать в сторону SDK?
-
Никто не знает?
-
Коллеги, здравствуйте. Поставил новую версию студии и привычный код местами стал подводить. Как обычно создаю форму
Application.CreateForm(TRegForm, RegForm); if Assigned(RegForm) then begin RegForm.Visible:=true; Main.Visible:=false; end;
и при выполнении кода вылетает ошибка, что на скрине.
Уже туплю. Скажите, что изменилось? как теперь запускать формы.
P.S. Тоже самое происходит, если формы переместить в раздел auto-create forms. Форма создается в единственном случае, когда в шапке ставишь ее главной.
-
1 минуту назад, Tumaso сказал:
Увы, но нет проблем вытащить пароль из apk, если он лежит в открытом виде. Подпись приложения этому никак не препятствует (подпись гарантирует только отсутствие изменений, но не более того).
Пароль внутри кода однозначно нужно хранить в разобранном виде, чтобы его было как можно сложнее узнать. Идеальный вариант - получать зашифрованный пароль с сервера, причем с использованием временных ключей шифрования.
Интересные подробности. Спасибо, буду думать как организовать это.
-
10 часов назад, FREEFAR сказал:
все то же самое. Включаешь тип шифрования и пароль.
В нашем случае мы БД создавали в рантайме
С шифрование разобрался спасибо за информацию. Возник вторичный вопрос, т.к. пароль указывается в интерфейсе самого firebird из под delphi, не будет ли возможно его вытащить из apk файла путем его декомпиляции? Или лучше пароль передать из серверной БД? Пароль для обращения к БД каким то образом шифруется или нет?
-
2 минуты назад, FREEFAR сказал:
все то же самое. Включаешь тип шифрования и пароль.
В нашем случае мы БД создавали в рантайме
Спасибо, буду пробовать.
-
-
2 минуты назад, FREEFAR сказал:
- А что пугает в локальном расположении БД? SQL lite прекрасно шифруется sha256 с головой.
- DataSnap убогий на мой взгляд. Уже сколько релизов подряд он течет не дай бог как. И по сути не лучшее решение для web сервера. Я думаю многие поддержат меня когда я скажу что лучшим вариантом будет трехзвенка Client -> PHP -> DB
- Хранить статичные данные в локальной БД тоже такое себе. А вдруг они станут не актуальны? Надо учесть это и описать методы их замены/удаления. Ну а также VACUUM
Катраз использую sql lite для локальной БД. Но из коробки delphi шифрование отсутствует. Подскажите, в какую сторону копать?
-
Товарищи, здравствуйте. Хотел бы проконсультироваться с вами на довольно сложно для меня тему. Имеется клиентское мобильное приложение на Андроид. Принцип его просто, загружает фирмы из БД в scrollbox. За счёт того, что сразу загрузка всех данных из сервера занимает длительное время, было принято решение загружать с сервера только ключевую информацию (название фирмы), а остальную информацию загружать из локальной БД. При этом, т.к. файл БД можно легко вытащить из apk файла любому человеку, размещать всю БД на локалке нельзя. Только информацию в целом не представляющую большой значимости в отдельности от названия фирмы и не только.
Вопрос, правильная ли схему построения была выбрана с точки зрения защиты данных (если это так можно назвать), и оптимизации загрузки информации.
Приветствуются ваши советы, как лучше построить схему взаимодействия приложения с БД, или как лучше защитить данные. В идеале для быстродействия, загнать побольше данных в локальную БД.
-
Проблема решилась добавление ApiKey. В первый раз добавил не тот ApiKey. Спасибо всем за помощь.
-
5 часов назад, sinuke сказал:
Да, нужен ключ специально для карт. Как его получить - погуглите. Я уже не помню как его получал, но точно помню, что через гугл все нашел и довольно быстро разобрался. Ничего сложного
Подскажите, с ключом разобрался, вылетать перестало. Но карта пустая. На ней нету ничего. Ещё одна преблуда нужна?)
-
-
1 минуту назад, sinuke сказал:
Дело не в устройстве. Даже стандартный пример работать не будет до тех пор, пока не пропишите ваш apiKey
У меня есть приложение, которое заливается на Маркет, соответственно там прописаны уже все ключи, но и в том приложение все равно происходит вылет при добавлении карты на форму. Нужен ключ специально для карт? Как его получить и куда воткнуть?
Оптимизация поток и AniIndicator
в Потоки и распределенные вычисления
Опубликовано
Здравствуйте. Ознакомился с вашей статьей по ссылке. Правильно ли я понял, что можно запустить индикатор по нажатию кнопки, и там же запустить доп.поток в который и происходят вся вычисления. Вопрос в том, в доп.потоке помимо вычислений происходит и динамическое создание визуальных компонентов. Которые потом кладутся на scrollbox. Где то в этот момент при создании компонентов и зависает индикатор. Я вот и хотел узнать, как сделать так, чтобы индикатор никогда не зависал?