Dmitry Sobko
-
Постов
35 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Dmitry Sobko
-
-
Прошу прощения за беспокойство. Проблема решена. Ура!
Действительно отладчик сбил с толку. voytalexey и kami спасибо Вам большое! На самом деле очень помогли!
Проблема заключалась в нумерации символов в string, например While (S[1] = '0') работает под Windows так как написано, т.е. берет первый символ и проверяет его. В FMX же нужно было написать так While (S[0] = '0'), т.е. первый символ - это нулевой. И как-то странно тогда получается, нет бы для всех операций со строками сделали такое правило, что первый символ - это S[0], когда например delete(S, 1, 1) удаляет именно первый символ, ведь следуя логике должно быть так delete(S, 0, 1). Это тоже сбило с толку.
Еще раз всем большое спасибо!
Если кому нужна будет реализация RSA для Android с использованием FGInt - поделюсь.
-
Вот так у меня выглядит запись TFGInt
TFGInt = Record Sign : TSign; Number : Array Of LongWord; End;
Вот так я пытаюсь перевести из двоичной системы в число
Procedure Base2StringToFGInt(S : String; Var FGInt : TFGInt); Var i, j, size : LongWord; Begin While (S[1] = '0') And (length(S) > 1) Do delete(S, 1, 1); size := length(S) Div 31; If (length(S) Mod 31) <> 0 Then size := size + 1; SetLength(FGInt.Number, (size + 1)); FGInt.Number[0] := size; j := 1; FGInt.Number[j] := 0; i := 0; While length(S) > 0 Do Begin If S[length(S)] = '1' Then FGInt.Number[j] := FGInt.Number[j] Or (1 Shl i); i := i + 1; If i = 31 Then Begin i := 0; j := j + 1; If j <= size Then FGInt.Number[j] := 0; End; delete(S, length(S), 1); End; FGInt.Sign := positive; End;
Казалось бы ничего военного, обычная работа с массивами, строками, но в итоге этот код записывает в FGInt.Number значение равное "01"
-
31 минуту назад, voytalexey сказал:
Вы путаете две разные ситуации: неправильную работу программы и неправильную работу отладчика (он же дебаггер).
Думаю, у вас второй вариант, ибо SetLength настолько много где используется, что сбой в её работе давно бы заметили. У меня в проектах для Андроида в XE6 она отрабатывает без проблем.
Некорректная работа отладчика более вероятна, но это, строго говоря, не влияет на поведение готовой программы.
Вы полностью правы! Действительно, раньше подобной ситуации я не замечал, пока не столкнулся с FGInt.
У меня стоит задача кодировать и декодировать сообщения шифрованием RSA. Для работы с большими числами я использую сторонний модуль FGInt http://www.submanifold.be/triade/GInt/gint.html
Этот модуль очень правильно, без погрешностей, производит любые операции с большими числами и в том числе у него есть функционал создания цифровых подписей, кодирования и декодирования информации. Перед тем как выбрать решение для шифрования RSA под Android я много гуглил и много кто ссылался именно на этот модуль. Скачав и изучив его я не нашел ничего такого, что могло бы не работать под Android.
Но к сожалению столкнулся с ситуацией, когда я перевожу строку в число типа FGInt и обратно, то мне возвращается постоянно число 01 вместо 1440294937918237327.
По всем ощущениям баг возникает после использования SetLength. Но я конечно могу ошибаться.
Может если приложу проект сюда, поможете разобраться?
-
Добрый день!
Обращаюсь к Вам с проблемой работы в FireMonkey с динамическими массивами.
Ситуация такая, в ходе работы приложения под Android мне необходимо задавать в определенный момент времени размер массива. Функция SetLength почему-то не работает.
Например, если делать так:
procedure TForm1.Button1Click(Sender: TObject); var Number123 : Array Of Integer; i : integer; begin SetLength(Number123, 5); for I := 0 to 4 do begin Number123[i] := i; end; end;
то можно наблюдать следующую ситуацию, что до работы SetLength массив пустой http://joxi.ru/DmBXxLLclDM6AP и это нормально, а после задания длины с массивом происходят странные вещи - вместо ячеек массива какое-то шестнадцатиричное значение http://joxi.ru/823O5xxSYdxl2O, элементы массива по циклу не заполняются.
Если то же самое делать под Windows, то все красиво - http://joxi.ru/gmvR7vvHD3lyma и http://joxi.ru/Vm6ydxxhYPLXrZ
Если под Android сделать так:
procedure TForm1.Button1Click(Sender: TObject); var Number123 : Array [0..4] Of Integer; i : integer; begin for I := 0 to 4 do begin Number123[i] := i; end; end;
То все работает как надо: http://joxi.ru/KAgKWooTDB84Al
Помогите пожалуйста разобраться. Гугл не помогает совсем.
Я думаю, что тут должно быть все просто, просто не хватает мне немного знаний и понимания что не так.
Надеюсь на помощь. Спасибо!.
-
В 09.08.2016 в 21:32, chaplin.u@gmail.com сказал:
пробовал на 10 и на 7. не работает.
короче нашел примеры с поддержкой Анроида и они заработали но только на ARM.
А где можно эти примеры посмотреть?
-
Добрый день! У меня тоже такой вопрос.
Я использую XE10
В примерах есть получение списка устройств, подключение к ним, и даже как отправить текст на устройство, но к сожалению этот пример не рабочий (про отправку текста). Т.е. я подключаюсь к устройству, пытаюсь отправить на него текст и после ожидания появляется ошибка в логе.
Помогите пожалуйста разобраться с приемом/передачей текстовой информации с/на устройство.
Спасибо!
-
Подскажите, могу ли я как-то передать поток видео с приложения для windows в TCaptureDeviceManager?
Другими словами я пытаюсь подключиться к веб камере компьютера с мобильного устройства.
Спасибо!
-
Друзья, подскажите пожалуйста, каким образом можно реализовать меню в стиле аккордеон как тут https://jqueryui.com/accordion/. Требования к компоненту:
1) На форму бросается этот компонент, у него есть ширина и высота.
2) В этом компоненте должны добавляться итемы, хоть в дизайнтайме, хоть в рантайме, высота которых так же задается в свойствах компонента, которая будет для всех одна
3) Должна быть свойство у компонента, которое имеет значение истина или ложь, которое означает развернуть первый элемент при запуске, или все элементы свернуты
4) Развернутым должен быть только один элемент, если кликаем (тапаем) на свернутый и при этом есть развернутый элемент, то развернутый должен свернуться, а выбранный - развернуться
5) У каждого элемента есть заголовок и изображение в виде треугольника, означающее развернут элемент или нет.\
6) Элементы разворачиваются на всю свободную область сдвигая свернутые ниже вниз, за пределы видимой области.
7) Если элементы находятся за пределами видимой области - появляется скролл.
У меня есть уже наброски, но я уверен, что я все делаю не так. Может уже кто-то задавался этим вопросом и есть уже готовое решение, хотя бы частично?
При необходимости предоставлю свой г...код, но лучше не стоит))
За основу я взял TVertScrollBox, в рамках которого все и происходит. В него я пока программно создаю столько TExpander'ов, сколько мне нужно - это итемы.
Вот г...код:
procedure TMainForm.AccordionAddItem(IdItem, CountItems: integer; IdRubricGood, CaptionText: string); var AccordionNewItem : TExpander; begin if AccordionItems[IdItem] <> nil then AccordionItems[IdItem].Destroy; AccordionNewItem := TExpander.Create(VertScrollBox_RubricsGood); With AccordionNewItem do begin Parent := VertScrollBox_RubricsGood; Align := TAlignLayout.Top; Text := CaptionText; StyleLookup := 'Expanderstyle'; Name := 'AccordionItem'+IntToStr(IdItem); Height := MainForm.Height-170; //(CountItems * 150)+29; IsExpanded := False; TagString := IdRubricGood; StylesData['text.OnClick'] := TValue.From<TNotifyEvent>(OnMaxMinPanelItems); end; AccordionItems[IdItem] := AccordionNewItem;end;
Потом еще куча кода на отловить развернутые и свернутые итемы и вставку ListBox'внутрь открытого с нужным мне контеном:
procedure TMainForm.OnMaxMinPanelItems(Sender: TObject); var AccordeonSelectedItem: TExpander; I:integer; begin AccordeonSelectedItem := TExpander(FindItemParent(Sender as TFmxObject,TExpander)); ListBoxGoods.Items.Clear; for I := 1 to RubricGoodsSize do begin if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = False) then begin AccordionItems[I].BeginUpdate; RectangleRestourantHeader.Visible := False; AnimationAniIndicator(True); AccordionItems[I].IsExpanded := True; GoodList(AccordeonSelectedItem.TagString, Sender); AccordionItems[I].EndUpdate; AnimationAniIndicator(False); end else if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = True) then begin AccordionItems[I].IsExpanded := False; RectangleRestourantHeader.Visible := True; end else begin AccordionItems[I].IsExpanded := False; end; end; end;
Я в отчаянии, помогите чем можете, очень нужно. Спасибо!
Публикация в PlayMarket
в Публикация приложения в Google Play
Опубликовано
Здравствуйте коллеги!
Помогите пожалуйста, всю голову сломал. google не помог.
Я написал приложение, которое разместил в PlayMarket'е. На моем смартфоне (Highscreen Power Rage) оно работает очень хорошо, без всяких проблем.
Вопрос: Кто бы не скачал мое приложение, ссылка https://play.google.com/apps/testing/ru.portalle.ElectraDoors, приложение после заставки либо вылетает, либо просто висит черный экран. В чем может быть проблема? Дебагер не выдает никаких ошибок или предупреждений.
В личном кабинете PLayMarket'а перед публикацией неизвестные мне люди тестируют это приложение и у всех одна и та же ситуация http://joxi.ru/J2be3VVcJvQMm6
Но один, видимо самый ответственный http://joxi.ru/bmoovzzhLjBXmy, пишет описание проблемы:
Проблема: java.lang.NullPointerException: Attempt to invoke interface method 'com.android.volley.l com.google.android.finsky.api.b.a(com.android.volley.t, com.android.volley.s, boolean)' on a null object reference
Google говорит о том, что проблема с какими то фрагментами. http://ru.stackoverflow.com/questions/514856/Ошибка-attempt-to-invoke-virtual-method-on-a-null-object-reference
Дословно: Метод
onCreateView
фрагмента предназначен для создания корневого элемента пользовательского интерфейса фрагмента. Т.е. в нем первым делом вы создаетеview
которая будет отображаться, а в конце вы должны вернуть этуview
из этого метода. Вы же зачем то пытаетесь искать вашиview
в активити вызываяgetActivity().findViewById()
. Очевидно что их там нету, и данный метод возвращаетnull
, но вы пытаетесь установить в них какие-то значения после чего и вылетаетNullPointerException
.О чем это он? Где мне это в Delphi смотреть?
Надеюсь на вашу помощь! Спасибо!