Der ADFC-Stormarn e.V. verwendet Klebeetiketten zur Codierung von Fahrrädern.
Auf diesen Etiketten ist ein EIN-Code (Eigentümer-Identifizierungs-Nummer) aufgedruckt, die es der Polizei, den Fundbüros und dem ADFC erlauben, den Eigentümer eines Fahrrads zu ermitteln. Eine über aufgeklebte Etikett angebrachte Plombierfolie schützt dieses vor dem Ablösen.
Dieses Verfahren eignet sich auch für andere Gegenstände, wie Kameras, Fahrrad-Akkus, Kinderwagen, Pferdesättel, etc.
Die Codier-Aktionen finden häufig j.w.d. statt und nicht immer gibt es dort einen verlässlichen Zugang zum Internet. Die Daten zur Generierung der EIN-Codes werden deshalb in einer lokal zur Verfügung stehenden SQLite-Datenbank abgelegt.
Diese Seite beschreibt den Hauptbildschirm Screen1 für die Code-Generierung.
Hauptbildschirm Screen1: Code-Generierung
Vom Ablauf unabhängige Funktionen
Der Kopf des Dialogbildschirms wird von einer Aktionsleiste gebildet. Deren Implementierung und Funktion ist im Kapitel ActionBar beschrieben. Die Funktionen zum Etikettendrucken sind im Kapitel Klebeetikett drucken dokumentiert.
![]() Startdialog Code-Generierung Erfassung des Ortsnamen |
![]() Erfassung des Straßennamen |
![]() Erfassung der Hausnummer und der Initialen |
![]() Komplett generierter EIN-Code mit Barcode |
Die Erfassung der Adressdaten erfolgt in mehreren Stufen: Eingabe des Ortsnamens, des Straßennamens der Hausnummer und der Initialen. Der Orts- und der Straßenname wird gegen eine Datenbank geprüft, bzw. kann aus der Datenbank selektiert werden. Der zugehörige EIN-Code wird nach jeder Eingabe aktualisiert. Der Barcode wird erst dann angezeigt, wenn die Adresserfassung vollständig ist.
nicht
alle Felder sind von Beginn an sichtbar. Sie werden im Laufe der Adresserfassung an- und abgeschaltet.
Wegen des großen Funktionsumfangs, ist die Block-Struktur recht unübersichtlich. In der folgenden Beschreibung der einzelnen Funktionen werden die Positionen der zugehörigen Blöcke markiert.
Typ | Name | Bedeutung | Referenzierung |
---|---|---|---|
Global | ActiveButtonColor | Hintergrundfarbe aktive Schaltflächen. | Get: Procedure SetDialogElements |
Global | Checksum | Ergebnis der Checksummenberechnung für den Barcode (Code-128) | Get: Procedure ComputeChecksum Get: Procedure ComputeCode Set: Procedure ComputeChecksum |
Global | CurrentState | Gibt den aktuellen Zustand wieder. Einer der Konstanten StateInputGemeinde, StateInputStraße oder StateInputHausNr. Siehe auch SetDialogElements. | Set: Procedure SetDialogElements |
Global | Gemeinde | Name der aktuell selektierten Gemeinde. | Get: Event ActionBar.MenuItemSelected Get: Event cmdOnlineRequest.Click Get: Procedure FillGemeindeListe Set: Procedure AfterSelectGemeinde Set: Procedure FillGemeindeListe Set: Procedure Reset |
Global | GemeindeID | Interne Datenbank-ID der aktuell selektierten Gemeinde. | Get: Procedure AfterSelectGemeinde Get: Procedure FillStraßenListe Set: Procedure AfterSelectGemeinde Set: Procedure Reset |
Global | GemeindeSchlüssel | Gemeindeschlüssel der aktuell selektierten Gemeinde oder "xxx". | Get: Function CodeIsNotComplete Get: Function getCode Get: Procedure ComputeCode Set: Procedure AfterSelectGemeinde Set: Procedure Reset |
Global | Hausnummer | Aktuell erfasste Hausnummer oder "xxx". | Get: Function CodeIsNotComplete Get: Function getCode Get: Procedure ComputeCode Set: Event cmdDelHausNr.Click Set: Event cmdDelStraße.Click Set: Event tbHausNr.TextChanged Set: Procedure Reset |
Global | InactiveButtonColor | Hintergrundfarbe gesperrte Schaltflächen. | Get: Procedure SetDialogElements |
Global | InactiveButtonTextColor | Tetxtfarbe gesperrte Schaltflächen. | Get: Procedure SetDialogElements |
Global | Initialen | Aktuell erfasste Initialen oder "xx". | Get: Function CodeIsNotComplete Get: Function getCode Get: Procedure ComputeCode Set: Event cmdDelHausNr.Click Set: Event cmdDelInitials.Click Set: Event cmdDelStraße.Click Set: Event tbInitialen.TextChanged Set: Procedure Reset |
Global | Jahr | Aktuelle Jahreszahl, zweistellig. | Get: Function getCode Get: Procedure ComputeCode Set: Event Screen1.Initialize |
Global | Kfz | Aktuell ermitteltes Kfz-Kennzeichen oder "xx". | Get: Function CodeIsNotComplete Get: Function getCode Get: Procedure ComputeCode Set: Procedure AfterSelectGemeinde Set: Procedure Reset |
Global | PrintCount | Anzahl am aktuellen Tag gedruckte Etiketten. | Get: Event Pte560.AfterDataPrinted Get: Event Screen1.Initialize Get: Event Screen1.OtherScreenClosed Set: Event Pte560.AfterDataPrinted Set: Event Screen1.Initialize Set: Event Screen1.OtherScreenClosed |
Global | StateInputGemeinde | Konstante als Argument für Prozedur SetDialogElements. | Get: Event Screen1.Initialize Get: Procedure Reset Get: Procedure SetDialogElements |
Global | StateInputHausNr | Konstante als Argument für Prozedur SetDialogElements. | Get: Procedure AfterSelectStrasse Get: Procedure SetDialogElements |
Global | StateInputStraße | Konstante als Argument für Prozedur SetDialogElements. | Get: Event cmdDelStraße.Click Get: Procedure AfterSelectGemeinde Get: Procedure SetDialogElements |
Global | Strasse | Name der aktuell selektierten Straße. | Get: Event ActionBar.MenuItemSelected Get: Event cmdOnlineRequest.Click Get: Procedure FillStraßenListe Set: Event cmdDelStraße.Click Set: Procedure AfterSelectStrasse Set: Procedure FillStraßenListe Set: Procedure Reset |
Global | StrasseID | Interne Datenbank-ID der aktuell selektierten Straße. | Get: Procedure AfterSelectStrasse Set: Event cmdDelStraße.Click Set: Procedure AfterSelectStrasse Set: Procedure Reset |
Global | StrassenSchlüssel | Straßenschlüssel der aktuell selektierten Straße oder "xxxxx". | Get: Function CodeIsNotComplete Get: Function getCode Get: Procedure ComputeCode Set: Event cmdDelStraße.Click Set: Procedure AfterSelectStrasse Set: Procedure Reset |
Global | Today | Tagesdatum im Format "yyyy-MM-dd" zum Zugriff auf eine TinyDB. | Get: Event Pte560.AfterDataPrinted Get: Event Screen1.Initialize Get: Event Screen1.OtherScreenClosed Set: Event Screen1.Initialize |
Global | WakeLock | Gibt an, ob aktuell ein WakeLock gesetzt ist. | Get: Event ActionBar.Button1Click Set: Event ActionBar.Button1Click |
Funktion | CodeIsNotComplete | Ermittelt, ob alle Felder für die Codegenerierung erfasst wurden. | Call: Event cmdPrint.Click Call: Procedure ComputeCode |
Funktion | FormatHausNr | Formatiert die Hausnummer auf drei Stellen mit führenden Nullen. | Call: Event tbHausNr.TextChanged |
Funktion | getCode | Liefert den EIN-Code. | Call: Event Util.DelayedEvent Call: Procedure ComputeCode |
Funktion | getGemeindeID | Ermittelt die interne Datenbank-ID der in der ListView listGemeinde selektierten Gemeinde. | Call: Event listGemeinden.AfterPicking Call: Procedure AfterSelectGemeinde |
Funktion | getSrassenID | Ermittelt die interne Datenbank-ID der in der ListView listStrasse selektierten Straße. | Call: Event listStrassen.AfterPicking Call: Procedure AfterSelectStrasse |
Prozedur | AfterSelectGemeinde | Wertet die erfasste Gemeinde aus und bereitet die Erfassung der Straße vor (s. ToDo). | Call: Event listGemeinden.AfterPicking Call: Procedure FillGemeindeListe |
Prozedur | AfterSelectStrasse | Wertet die erfasste Starße aus und bereitet die Erfassung der Hausnummer vor (s. ToDo). | Call: Event listStrassen.AfterPicking Call: Procedure FillStraßenListe |
Prozedur | CheckPrinters | Prüft, ob nur ein Drucker gekoppelt ist und schlägt diesen zur Verwendung vor. | Call: Event Screen1.Initialize Call: Event Screen1.PermissionGranted |
Prozedur | ComputeChecksum | Berechnet die Checksumme für den Barcode (Code-128). | Call: Procedure ComputeCode |
Prozedur | ComputeCode |
Berechnet den EIN-Code mir Leerzeichen zwischen den Elementen. Falls alle Daten vorliegen:
|
Call: Event cmdDelHausNr.Click Call: Event cmdDelInitials.Click Call: Event cmdDelStraße.Click Call: Event tbHausNr.TextChanged Call: Event tbInitialen.TextChanged Call: Procedure AfterSelectGemeinde Call: Procedure AfterSelectStrasse |
Prozedur | FillGemeindeListe | Füllt das ListView listGemeinden mit den Gemeindenamen, die mit der Zeichenfolge beginnt, wie sie Global Gemeinde hinterlegt ist. | Call: Event Screen1.Initialize Call: Event tbGemeinde.TextChanged |
PProzedur | FillStraßenListe | Füllt das ListView listStrassen mit den Straßennamen, die mit der Zeichenfolge beginnt, wie sie Global Strasse hinterlegt ist. | Call: Event tbStrasse.TextChanged Call: Procedure AfterSelectGemeinde |
PProzedur | kbNext | Den ActionButton der Tastatur für die TextBox tbHausNr auf "weiter" einstellen. | Call: Procedure Reset |
Prozedur | kbNone | Den ActionButton der Tastatur für das Feld Initialen auf "keine Funktion" einstellen. | Call: Procedure Reset |
Prozedur | RequestBTPermissions | Fordert bei Android die Erlaubnis zur Benutzung der Bluetooth-Funktionen an./td> | Call: Event Screen1.Initialize |
PProzedur | Reset | Versetzt die Eingabe- und Anzeigeelemente in den Grundzustand (s. ToDo). | Call: Event cmdDelGemeinde.Click Call: Event Screen1.Initialize |
PProzedur | SetDialogElements | Bereit die Eingabe- und Anzeigeelemente für die verschiedenen Erfassungszustände auf (s. ToDo). | Call: Event cmdDelStraße.Click Call: Event Screen1.Initialize Call: Procedure AfterSelectGemeinde Call: Procedure AfterSelectStrasse Call: Procedure Reset |
Event | ActionBar.Button1Click | ||
Event | ActionBar.MenuItem1Selected | ||
Event | ActionBar.MenuItemSelected | ||
Event | cmdDelGemeinde.Click | ||
Event | cmdDelHausNr.Click | ||
Event | cmdDelInitials.Click | ||
Event | cmdDelStraße.Click | ||
Event | cmdExpand.Click | ||
Event | cmdOnlineRequest.Click | ||
Event | cmdPrint.Click | ||
Event | KeyboardControl.ActionButtonClicked | ||
Event | listGemeinden.AfterPicking | ||
Event | listStrassen.AfterPicking | ||
Event | pickPrinter.AfterPicking | ||
Event | pickPrinter.BeforePicking | ||
Event | Pte560.AfterDataPrinted | ||
Event | Screen1.BackPressed | ||
Event | Screen1.ErrorOccurred | ||
Event | Screen1.Initialize | ||
Event | Screen1.OtherScreenClosed | ||
Event | Screen1.PermissionDenied | ||
Event | Screen1.PermissionGranted | ||
Event | SQLiteEIN.SQLError | ||
Event | tbGemeinde.TextChanged | ||
Event | tbHausNr.TextChanged | ||
Event | tbInitialen.TextChanged | ||
Event | tbStrasse.TextChanged | ||
Event | Util.DelayedEvent |
Wenn das gerät eine Weile nicht benutzt wird, schaltet Android normalerweise das Gerät aus. Um es wieder zu aktivieren, muss man sich neu anmelden. Das ist besonders dann störend, wenn das Gerät von mehreren Personen benutzt wird. Dann muss entweder die Pin weiter gegeben werden oder der Eigentümer des Geräts zum erneuten Anmelden verfügbar sein.
Über die Extension UrsAI2KeepAwake wird ein ScreenDimWakeLock gesetzt, der das Wechseln in den Standby-Modus verhindert, es aber erlaubt, dass Android das Gerät zur Akkuschonung abdunkeln darf. Bei der Initialisierung von Screen1 wird bereits ein ScreenDimWakeLock als Voreinstellung gesetzt. Über den AktionButton1 der ActionBar kann der WakeLock gelöscht oder neu gesetzt werden:
Ein gesetzter WakeLock wird durch das Symbol
in der
AktionBar angezeigt. Wenn kein WakeLock gesetzt ist wechselt das Symbol auf
.
Zugehörige Code-Blöcke: |
![]() |
Der Aufruf weiterer Funktionsdialoge erfolgt über das Menü der Actionbar:
Beim Initialisieren des Screens wird das Menü aufgebaut:
Wird ein Menüpunkt angetippt, wird das Ereignis ActionBar.MenuItemSelected ausgelöst. Der zugehörige Funktionsdialog wird geöffnet. Wenn die Funktion Online-Abfrage gestartet werden soll, werden die bereits erfassten Daten als Liste zusammengestellt und dem Dialog als Startwert zur Verfügung gestellt.
Zugehörige Code-Blöcke: |
![]() |
Die Funktionen sind auf der Seite EIN-Code: Drucken beschrieben.
Zugehörige Code-Blöcke: |
![]() |
Die Schaltfläche
Zugehörige Code-Blöcke: |
![]() |