AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Android Barcodescanner

Ein Thema von helste · begonnen am 13. Jan 2017 · letzter Beitrag vom 17. Jan 2017
Antwort Antwort
Seite 3 von 3     123   
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#21

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 09:55
Ich habe es jetzt mal tatsächlich geschafft das SDK, welches ich vom Hersteller bekommen habe, in meine App einzubinden.
Habe eine Java Bridge erstellt und kann die bereitgestellte Klasse auch ansprechen.
Über das OnClick Event eines TButton kann ich nun den Scannvorgang starten. Das war zwar als Test, ob die Implementierung des SDK funktioniert recht nett, aber für meine praktische Anwendung bringt mir das gar nichts.
Schließlich soll der Scan ja durch drücken einer der Hardwarescantasten erfolgen und außerdem hat der Scanner zwar den Barcode gesacannt, das obligatorische Beep von sich gegeben, aber der gescannte code erschien nicht im TMemo, auf den ich den Focus gestellt hatte.
Ehe ich jetzt noch mehr Zeit mit try and error verplempere, werde ich mal warten, was die von Embarcadero zum Firemonkeybug sagen.
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#22

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 10:50
Ich werde verrückt.
Jetzt habe ich es hinbekommen, dass es funktioniert, aber die Umstände sind merkwürdig und auch unbefriedigend.
Nachdem ich mit dem SDK gespielt hatte, ging plötzlich gar nichts mehr. Auch nicht in der Scanner app, wo es vorher funktioniert hatte. Deshalb habe ich da mal scanner reset ausgeführt. Dann ging es wieder.
Dann klappte es plötzlich in meiner testapp. In einer anderen wieder klappte es nicht. Dann habe ich mich auf die Suche nach dem Unterschied gemacht.
Der war dann darin gelegen, dass ich in einer app im Projektquelltext folgende Zeile hatte:

VKAutoShowMode := TVKAutoShowMode.DefinedBySystem;

und in der anderen

VKAutoShowMode := TVKAutoShowMode.Never;

Im ersten Fall poppt das Softwarekeyboard auf und dann funktioniert auch der Scan.
Im zweiten Fall poppt kein Keyboard auf und der Scan funktioniert nicht.
Blöderweise will ich nicht, dass das Softwarekeyboard aufpoppt, da es mir den halben Screen verdeckt und ich es auch gar nicht brauche, da die Daten per Barcode kommen bzw. über die Hardwaretastatur eingegeben werden können.

In der Scannerapp des Gerätes funktioniert der Scan in beiden Fällen. Sollte also grundsätzlich möglich sein.

Werde das Embarcadero auch so mitteilen.

Bei der Gelegenheit suche ich nun auch nach einer Möglichkeit das Softwarekeyboard nicht standardmäßig aufzumachen, wenn ein Eingabefeld den Focus bekommt, sondern allenfalls das Aufpoppen des Keyboards durch den Anwender initiiert werden kann, in welcher Form auch immer.
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#23

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 12:07
Falls es interessiert, ich habe einen Workaround gefunden.

Habe diesen Thread entdeckt:
http://www.delphipraxis.net/186005-v...ktivieren.html

Ich habe nun die unit VirtualKeyboardService erstellt und in meine Testapp eingebunden.

Die Methoden ShowVirtualKeyboard und HideVirtualKeyboard habe ich allerdings public declariert, damit ich sie auch aufrufen kann.

ShowVirtualKeyboard habe ich leicht modifiziert, damit ich notfalls doch das Keyboard anzeigen kann. Zu diesem Zweeck muss ich vor dem Aufruf von ShowVirtualKeyboard das Tag des Editcontrols auf <> 0 setzen.

Code:
function TVirtualKeyboardService.ShowVirtualKeyboard( const AControl: TFmxObject ): Boolean;
begin
  if IsOverriddenObject( AControl ) and (acontrol.Tag = 0) then
  begin
    HideVirtualKeyboard;
    Result := False;
  end
  else
    Result := FOriginalService.ShowVirtualKeyboard( AControl );
end;
Meinem TEdit habe ich einen Button verpasst in dessen OnClick ich Tag mit 0 oder 1 versorge. Dadurch kann ich mit dem Button das Keyboard sichtbar oder unsichtbar machen.

Code:
procedure TForm1.EditButton1Click(Sender: TObject);
begin
Edit1.Tag := abs (Edit1.Tag - 1);
if Edit1.Tag = 0 then
   TVirtualKeyboardService.Current.HideVirtualKeyboard
else
   TVirtualKeyboardService.Current.ShowVirtualKeyboard(Edit1);
end;
Im OnEnter setze ich Tag immer auf 0;

Das funktioniert erst mal ganz vernünftig. Einziges Problem ist noch, dass der erste Scan nur funktioniert, wenn einmal ein Keyboard angezeigt wurde.

Habe deshalb mal Edit1.Tag im Formshow auf -1 gesetzt und im OnEnter von Edit1 im Falle, dass Tag < 0 ist, das Keyboard einmal angezeigt und gleich wieder geschlossen.

Code:
procedure TForm1.FormShow(Sender: TObject);
begin
Edit1.Tag := -1;
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
if Edit1.Tag < 0 then
   begin
   TVirtualKeyboardService.Current.ShowVirtualKeyboard(Edit1);
   TVirtualKeyboardService.Current.HideVirtualKeyboard;
   end;
Edit1.Tag := 0;
end;
Das funktioniert so, ist aber nicht befriedigend, da es nicht sehr schön ist, wenn das Keyboard kurz angezeigt wird.
Da ich in der richtigen App aber ohnehin zu Beginn eine Login Maske habe und man da sowieso sinnvollerweise ein Keyboard benötigt (und es da auch nicht stört), kann ich mir das dann da eventuell ersparen.

Irgendwie ziemlich kompliziert nur für so eine einfache Funktion. Aber was solls, Hauptsache es funktioniert.

Wäre aber trotzdem für Anregungen, Verbesserungsvorschläge und Hinweise auf eventuelle Fallstricke bzw. Denkfehler dankbar.
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
221 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 12:24
Bin neugierig , aber evtl hab ich es auch überlesen ,
aber welcher Scanner ist es denn Hersteller / Modell

mfg Hannes
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#25

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 12:39
Es ist dieser Scanner:
http://www.ruggedscanners.com/obm-a5...-p00017p1.html

Habe ihn aus China importiert. Das Teil ist sehr ansprechend. Super look and feel. Bin damit sehr zufrieden. Ist mal ein Test für weitere um sie dann für Lagerwirtschaft einzusetzen.

Übrigens habe ich nun eine deutlich einfachere Lösung meines Problems gefunden. Kommt ohne die unit VirtualKeyboardService aus.

Zuerst setze ich im Projektquelltext wieder

VKAutoShowMode := TVKAutoShowMode.Never;

Dadurch entfällt das umständliche Unsichtbarmachen des Keyboards.
In der Loginmaske setze ich bei den Eingabefeldern das OnEnter wie folgt:

Delphi-Quellcode:
procedure TForm1.Edit1Enter(Sender: TObject);

var
   FService: IFMXVirtualKeyboardService;

begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) then
   begin
   FService.ShowVirtualKeyboard(Edit1);
   Edit1.SetFocus;
   end;
end;
Dadurch wird schon mal die Tastatur erstmalig sichtbar und dadurch wird in weiterer Folge der Scanvorgang erst richtig möglich.

Das OnEnter aller Felder, die kein Keybord benötigen, bzw. wo es nicht angezeigt werden soll, sieht so aus:

Delphi-Quellcode:
procedure TForm1.Edit2Enter(Sender: TObject);

var
   FService: IFMXVirtualKeyboardService;

begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) then
   FService.HideVirtualKeyboard;
TEdit (Sender).Tag := 0;
end;
Jedes dieser Eingabefelder bekommt aber einen Button, über den man das Keyboard anzeigen kann. Eventuell checke ich mal, ob das nicht besser über eine Hardwarteste des Scanners erledigt werden sollte. Dann halt im OnKeUp des Eingabefeldes.
Einstweilen aber mal so:

Delphi-Quellcode:
procedure TForm1.EditButton1Click(Sender: TObject);

var
   FService: IFMXVirtualKeyboardService;

begin
Edit2.Tag := abs (Edit2.Tag - 1);
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) then
   begin
   if Edit2.Tag = 0 then
      FService.ShowVirtualKeyboard(Edit2)
   else
      FService.HideVirtualKeyboard;
   Edit2.SetFocus;
   end;
end;
Funktioniert hervorragend so.
Zumindest nach ersten kurzen Tests.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 12:40
Ich habe es jetzt mal tatsächlich geschafft das SDK, welches ich vom Hersteller bekommen habe, in meine App einzubinden.
Habe eine Java Bridge erstellt und kann die bereitgestellte Klasse auch ansprechen.
Über das OnClick Event eines TButton kann ich nun den Scannvorgang starten. Das war zwar als Test, ob die Implementierung des SDK funktioniert recht nett, aber für meine praktische Anwendung bringt mir das gar nichts.
Schließlich soll der Scan ja durch drücken einer der Hardwarescantasten erfolgen und außerdem hat der Scanner zwar den Barcode gesacannt, das obligatorische Beep von sich gegeben, aber der gescannte code erschien nicht im TMemo, auf den ich den Focus gestellt hatte.
Wenn du das so machst, müsste es in der API eine Methode/Event geben, welche dir den Code "im Programm" gibt und dann kannst du den eingelesenen Code in das gewünschte Edit einfügen.

Wenn es einen Hardwarebutton gibt, dann kann man diesen bestimmt auch via API/SDK ansprechen, bzw. ein Event dafür registrieren.
$2B or not $2B

Geändert von himitsu (17. Jan 2017 um 14:11 Uhr)
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#27

AW: Problem mit Android Barcodescanner

  Alt 17. Jan 2017, 12:43
Ja, aber leider ist die Doku des SDK etwas rudimentär gehalten bzw. kenne ich mich da zu wenig damit aus.
Meine andere Lösung funktioniert aber schon mal recht gut. Bin gerade am testen, ob es wirklich in allen Fällen so tut, wie ich will.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz