• 0
ophion

Доработка компонента для чтения штрих-кодов под RAD XE7

Вопрос

Добрый вечер дамы и господа.

 

Для RAD XE5 был написан замечательный компонент для работы со считыванием штрих-кодов на мобильных платформах.

Суть темы следующая...

 

Этот компонент очень легко переделать под RAD XE6, но вот под XE7 он никак не идёт, а разбираться с этой проблемой, честно говоря, нет времени.

 

Я выложу ссылочку на компонент, который отлично работает с XE5, а остальные представители сообщества, у которых найдется немного времени, могут допилить его для версий XE6 и XE7 и запостить в этой теме ссылочки и описания изменений.

 

Коллективный разум, так сказать...

 

Вот сама ссылочка для версии XE5

 

TKRBarCodeSanner.zip

 

P.S.

 

Если у кого-то имеются другие компоненты для работы со штрих-кодами, не поленитесь выкатить их в тему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

36 ответов на этот вопрос

  • 0

Никаких проблем ни с установкой компонента в XE7 ни с адаптацией не возникло. В чем именно у вас проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Может особенности девайса....

 

Galaxy NOTE 2 (Android 4.4.2)

 

После сканирования не отрабатывает OnScanResult.

 

информация размещается в буфере обмена, но вот AResult в себе информации не содержит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Может, хотя странно... Я проверял на нескольких устройствах, в том числе lexand a702 и huawei ascend p7, все отлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Может тогда зальёте в тему адаптированные варианты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Там адаптировать нечего, всего 2 изменения в файле FMX.TKRBarCodeScanner.pas.

 

1.

// было
uses
  System.Classes
  {$IFDEF IOS}
  ,FMX.TMSZBarReader
  {$ENDIF}
  {$IFDEF ANDROID}
  ,FMX.Platform, FMX.Helpers.Android, System.Rtti, FMX.Types, System.SysUtils,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  FMX.StdCtrls, FMX.Edit
  {$ENDIF}
  ;

// стало
uses
  System.Classes
  {$IFDEF IOS}
  ,FMX.TMSZBarReader
  {$ENDIF}
  {$IFDEF ANDROID}
  ,FMX.Platform, FMX.Helpers.Android, System.Rtti, FMX.Types, System.SysUtils,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  FMX.StdCtrls, FMX.Edit
    {$IF CompilerVersion >= 20}
    ,Androidapi.Helpers
    {$ENDIF}
  {$ENDIF}
  ;

2

// было
{$IFDEF ANDROID}
function TTKRBarCodeScanner.HandleAppEvent(AAppEvent: TApplicationEvent;
  AContext: TObject): Boolean;
begin
  Result := False;
  if FMonitorClipboard and (AAppEvent = aeBecameActive) then
  begin
    Result := GetBarcodeValue;
  end;
end;
{$ENDIF}

// стало
{$IFDEF ANDROID}
function TTKRBarCodeScanner.HandleAppEvent(AAppEvent: TApplicationEvent;
  AContext: TObject): Boolean;
begin
  Result := False;
  if FMonitorClipboard and (AAppEvent = {$IF CompilerVersion >= 20}TApplicationEvent.{$ENDIF}aeBecameActive) then
  begin
    Result := GetBarcodeValue;
  end;
end;
{$ENDIF}
Brovin Yaroslav и ophion понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А вот теперь у меня возникли проблемы с этим компонентом. Суть в следующем - в XE6 все работает замечательно, а в XE7 не приходит событие. Код для проверки простой

procedure TForm1.Button1Click(Sender: TObject);
begin
   TKRBarCodeScanner1.Scan;
end;

procedure TForm1.TKRBarCodeScanner1ScanResult(Sender: TObject; AResult: string);
begin
   Button1.Text := '!!!';
end;

Экспериментальным путем выяснил, что когда приложение вновь становится активным, в XE6 оно получает 2 сообщения - WillBecomeForeground и BecameActive, а в XE7 дважды приходит WillBecomeForeground. Из за этого не отрабатывает функция

{$IFDEF ANDROID}
function TTKRBarCodeScanner.HandleAppEvent(AAppEvent: TApplicationEvent;
  AContext: TObject): Boolean;
begin
  Result := False;
  if FMonitorClipboard and (AAppEvent = {$IF CompilerVersion >= 20}TApplicationEvent.{$ENDIF}aeBecameActive) then
  begin
    Result := GetBarcodeValue; // Сюда не попадает !!!!!!
  end;
end;
{$ENDIF}

Но даже если в отладчике принудительно передать управление на эту строчку, вызов функции GetBarcodeValue не происходит. Помогите разобраться!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Обход проблемы описан здесь. Похоже это действительно баг XE7, и если это на самом деле так, хочется в очередной раз сказать разработчикам: "Ребята, не торопитесь. Лучше выпускать 1 версию RAD Studio в год, при этом больше времени уделяя тестированию. Не нужно гнать брак...".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Обход проблемы описан здесь. Похоже это действительно баг XE7, и если это на самом деле так, хочется в очередной раз сказать разработчикам: "Ребята, не торопитесь. Лучше выпускать 1 версию RAD Studio в год, при этом больше времени уделяя тестированию. Не нужно гнать брак...".

 

С одной стороны, да, гнать бажное ПО это не комильфо. То тут, то там выплывают баги/фичи. Т.е. количество выпущенных версий и апдейтов растёт, а количество багов не меняется. Хотя может это сообщение на эмоциях писано.

С другой стороны Embacadero стоит признаться самим себе в том, что они не могут писать ПО без багов и надо понять что это нормально - все пишут бажное ПО. Выпускается действительно много девайсов, у всех свои версии, свое железо, а еще есть надстройки от самих компаний, которые также дают свои "поправки". И в целом даже полугодичный выпуск становиться слишком долгим периодом для тех кто ждет исправлений или новшеств.

Ну и конечно ценник на новую версию не маленький. И многие делают большие пропуски в покупках, ибо нет желания (не то что возможности, а именно желания уже нет) платить за новые версии, в которых ждут новые баги. В итоге покупают скорее всего (Embacadero виднее конечно)  через одну, две, а то и через три версии. Все остальные используют ломанные версии. А всё вместе это ведет к упущенной выгоде в Embacadero.

В очередной раз прошу Embacadero обратить внимание на политику продаж  лицензий у UDK4.

Вы регистрируетесь на сайте. Оплачиваете 19$/мес, и скачиваете launcher. Через launcher можно скачать примеры (платные и бесплатные), а также саму среду UDK4. Самое главное что сразу в лаунчере доступны обновления с новыми фишками и исправленными ошибками, т.е. там так и  идет - версия 4.0.1, 4.0.3, 4.0.4. И можно скачать новую если хотите и если ваша подписка не истекла.

У Embacadero уже есть зачатки подобного - это AppMethod. Но он обновляется исключительно по выходу новых версий или апдейтов.

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

Насколько я помню в ХЕ7 было исправленно почти 2000 багов. Но всем пришлось ждать выхода новой версии. Разработчики не в один миг же, в день перед релизом, их исправили, они шли к этому день ото дня. Так почему же по такой схеме не выкладывать версии и патчи по мере исправления багов - 10 багов исправили и выложили. Исправили в 1 баг в неделю, тоже выложили. 

Есть и еще один момент, обоюдно удобный для клиента и разработчика - это доступность бета версий. На свой страх и риск их можно скачивать. 

Есть конечно и такая фишка, не думаю что Embacadero пойдет на неё, но все же - это то что даже после окончания подписки, среда всё еще доступна. Просто вы больше не можете получать обновления, готовое ПО не может быть использовано в коммерческих целях и нельзя писать в тех поддержку и отписываться о багах. Но по прежнему доступен офф. форум.

Да и может убрать это безумное количество типов Pro, Enterprise и разделение по платформам и т.д.? Не уверен, но мне кажется что изжило себя - это раз, а во вторых для компании поддерживать их после выпуска новых версий наверное геморно. 

 

Могу привести пример себя - даже если я не пользуюсь UDK4 каждый день, я всё равно оплачиваю каждый месяц 19$, так как я не могу знать когда он мне понадобиться или когда у меня появиться время, но он должен быть доступен в любой момент.

 

Учитывая что ломанные версии все равно есть, то может Embacadero стоит хотя бы попробовать такой подход, отказаться всегда успеют. А если выстрелит и получиться?

 

Извините за адский оффтопик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

И в целом даже полугодичный выпуск становиться слишком долгим периодом для тех кто ждет исправлений или новшеств.

Я имел ввиду именно новые версии, update и hotfix никто не отменял. Ведь что палучается на практике? Есть стабильно работающее приложение и есть желание перевести его на новую версию Delphi. И тут натыкаешься на ряд сюрпризов, как в виде багов (вроде описанного выше), так и в виде нововведений (вроде неблокируемых сообщений). И тут посещает мысль - а оно мне надо? Зачим нарушать главную заповедь программиста (работает - не трогай)? Зачем добровольно брать на себя эти проблемы, когда и других задач выше крыши на месяцы вперед расписано. И все это значительно тормозит как освоение технологии в целом, так и миграцию на новые версии в частности.

И с тем, что эта ситуация отбивает желание покупать новые версии, я абсолютно согласен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

estrabrunnengi,

Ребят, ну ёлы-палы…

  1. Завязывайте с оффтопом (кстати, уже не первое устное предупреждение)
  2. Писать здесь (на форуме) своё мнение о работе компании бессмысленно, т.к. форум принадлежит Ярославу, а он программер (не менеджер компании!) Об этом тоже уже писалось. Менеджеров компании на этом форуме нет и не будет (насколько я понял).
  3. Если уж так хочется высказать своё мнение, то высказывайтесь на почту компании, а не засоряйте форум для разработчиков (технические вопросы/ответы). Это вам не sql.ru, здесь такой хрени, не потерпят и поощрять, точно не будут.

Ещё раз повторяю, завязывайте!

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну никак не закончатся мои злоключения с этим компонентом. Нужно вывести сообщение в событии, приходящем после прочтения штрих-кода. Вроде бы простая задача, но не тут то было, вылетает ошибка и никак мне от нее не избавиться...

procedure TForm1.BarCodeScannerScanResult(Sender: TObject; AResult: string);
begin
//   MessageDlg( AResult, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK],
//               0, TMsgDlgBtn.mbOK,
//               procedure ( const AResult: TModalResult ) begin
//               end );
   Button3.Visible := True;
end;

Если сообщение не выводить, то все ок, но мне нужно его вывести... Пример выкладываю, надеюсь на Вашу помощь.

XE7.ZIP

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А что за ошибка-то?

 

Под отладчиком вылетают 3 ошибки подряд

 

6398646.jpg

 

6284570.jpg

 

6403766.jpg

 

А без отладчика - приложение перезапускается, то есть появляется заставка после чего открывается форма приложения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

UP.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

В XE7 Upd1 ошибка исправлена.

Доброго времени суток!!!

А можете подсказать или лучше прислать исходник, та же проблема с использованием этого компонента, не работает под XE7 и всё тут, а очень нужно...

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Что подсказать то? Пример есть в архиве с компонентом, в XE7 Upd1 все нормально работает. Если у вас имеются проблемы, выкладывайте "проблемный" пример, поглядим...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Добрый вечер!!! В архиве папка Example (пример), прошу после скачивания переименовать  расширение архива в rar так как я сжимал в  rar архив, но переименовал в zip в связи с тем, что rar нельзя отправить в сообщении, в ней добавлены мной исправления в модуль FMX.TKRBarCodeScanner.pas, а именно подключён дополнительный модуль AndroidAPI.Helpes и исправлена функция вызывающая ошибку, пример компилируется, устанавливается на телефон при запуске но по нажатию кнопки приложение долго весит, до тех пор пока система не выдаст сообщение о том, что оно не отвечает, в общем не работает, помогите пожалуйста разобраться.  

Example.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Переименовывал расширение потому, что при сжатии Zip-ом размер архива больше допустимого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ты следующий раз не упаковывай в архив папки Android и __history и все будет нормально 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Написал небольшой класс по работе с сканером 

 

Проверял на XE7 Update 1 под Android 4.1.2

 

Пример

Barcode.zip

ophion, Brovin Yaroslav и Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Написал небольшой класс по работе с сканером 

 

Проверял на XE7 Update 1 под Android 4.1.2

 

Пример

Алексей, спасибо Вам большое!!! Но к сожелению на моём Sony Xperia Z1 Android 4.4.4 не работает, компилируется, запускается

но висит после нажатия на кнопку,

может у Вас есть соображения почему это может быть?

Brovin Yaroslav понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Может, это тот самый редкий случай, когда прога с "конкретным" функционалом "виснет" на каком либо "конкретном" устройстве?.. (это был риторический вопрос) Я столкнулся с такой ситуацией когда нужно было включить вспышку на аппарате Huawai. У вас есть возможность протестировать свой код на другом устройстве?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Написал небольшой класс по работе с сканером 

 

Проверял на XE7 Update 1 под Android 4.1.2

 

Пример

Алексей, спасибо Вам большое!!! Но к сожелению на моём Sony Xperia Z1 Android 4.4.4 не работает, компилируется, запускается

но висит после нажатия на кнопку,

может у Вас есть соображения почему это может быть?

 

 

Решение простое, проверь у себя наличия программы https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=ru

так как мой пример и предыдущий класс использует эту программу для считывания штрихкода

    intent := TJIntent.Create;
    intent.setAction(StringToJString('com.google.zxing.client.android.SCAN'));
    SharedActivity.startActivityForResult(intent, 0);

Проверял у себя на Android 4.4.2, программа в начале не была установлена и симптомы были как у тебя, после установки все стало нормально, на многих устройствах эта программа уже предустановлена

Brovin Yaroslav понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: ophion
      Всем доброго времени суток.
       
      Среда: Rad Studio 10 Seattle (без Update 1)
      Платформа: Android
       
      Столкнулся с необходимостью генерации QR-кода для отображения на TImage.
      Воспользовался информацией, взятой тут http://zarko-gajic.iz.hr/firemonkey-mobile-android-ios-qr-code-generation-using-delphi-xe-5-delphizxingqrcode/
      У автора возникла проблема с опцией DisableInterpolation на платформе Android (тот же код отлично работает на Windows), а именно, на Android это не работает (изображение получается размытым)
      Перепробовал всё, что приходило в голову, а так же было нагуглено.... но все попытки безуспешны.
      Подскажите, как изменить размер изображения, чтобы оно не становилось мутным?
    • Автор: Zhuchkov
      Добрый день,
      Знает ли кто-либо адекватный способ для чтения QR кодов на IOS используя XE8 или выше,
      желательно с рабочими примерами.
      ZBar и ZXing - не работают (черный экран)
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу