German B4XTable

Heinz

Active Member
Licensed User
Longtime User
Hallo, habe mir eine kleine B4A - App gemacht, die Tierchips analysiert.
Ich habe auch einen BT-Scanner, der über HID Tastatur die Chipnummer
der Katzen einwandfrei in ein Editfeld einliest. Im beiliegenden Programm
sind zum Testen 3 Einträge von Hand in die LV eingetragen.
Nun möchte ich gerne statt des Listviews ein BX4Table mit 3 Columns (Text) einbauen.
Leider sind die Beispiele im Forum nicht das, was ich suche. Also Export/Import
als .CSV Datei, Klick auf Zeile im B4XTable usw.
Hat jemand sowas schon gemacht und kann mir da jemand auf die Sprünge helfen ?
Zumindest ein paar Code-Beispiele zum Laden, Speichern, Einträge ins Table setzen
usw. wären gut.
Im Forum komme ich da irgendwie nicht weiter.
Im Anhang mal mein bisheriges Werk.
 

Attachments

  • Tierschips.zip
    11.4 KB · Views: 109

klaus

Expert
Licensed User
Longtime User
Eine Variante in B4A ist die Table Class.
Beiliegend Dein Programm geändert.

Ein Paar Bemerkungen:
1. Es ist vorteilhaft selbsterklärende Namen für die Views zu benutzen.
EditText1 sagt mir nichts aber edtNummer ist verständlicher.
2. Du gibst die Texte für Deine Views im Code ein. Die kann man direkt im Designer eingeben.
Ausser, Du willst Dein App mehrsprachig machen.
3. Hast Du vor Deine App multi-Platform zu machen ?
Wenn ja, solltest Du nur mit B4XViews arbeiten. Du hast B4A specifische Objecte und multi-Platform Objekte.
Dann würde aber die Table Class nicht mehr funktionieren, die ist B4A spezisisch.
 

Attachments

  • Tierschips1.zip
    29.5 KB · Views: 112

Heinz

Active Member
Licensed User
Longtime User
Danke, sieht schon mal super aus.
Die App soll nur fürs Smartphone und auch nicht mehrsprachig sein.

Muß das Code-Modul xTableLite.bas nur in den Projektordner kopiert werden
oder sind noch weitere Einstellungen nötig ? Da hatte ich bislang Probleme.
Ich wollte ursprünglich die Länder - und Hersteller - Zuweisungen in einem
Code-Modul haben, um das ganze übersichtlicher zu haben bzw. um es öfter
zu benutzen.

Was noch fehlt, bzw. was ich noch nicht gefunden habe, sind die Spalten-Namen
zu aktivieren. Also die Header-spalten.
Die Tabelle könnte etwas breiter sein (etwa eine spaltenbreite), was sich aber im Designer
nicht einstellen läßt, egal wie breit ich sie auch ziehe.

Ansonsten nochmals Danke dafür. Hätte ich alleine nicht so hinbekommen.
 

klaus

Expert
Licensed User
Longtime User
Muß das Code-Modul xTableLite.bas nur in den Projektordner kopiert werden
oder sind noch weitere Einstellungen nötig ? Da hatte ich bislang Probleme.
Das Modul muss in den Projektordner kopiert werden.
Dann sind viele Einstellungen möglich, entweder im Designer oder im Code.
Welche Probleme hattest Du?

Die Spaltenbreiten können im Code eingestellt werden mit.
Tabelle.SetColumnsWidths(...
In dem Programm, das ich Dir geschickt habe, werden die Breiten automatisch an den breitesten Inhalt angepasst.

Beiliegend das gleiche Programm mit festgestellten Spaltenbreiten.
Der Vorteil von xTableLite gegenüber B4XTable ist dass man in beide Richtungen scrollen kann.

xTableLite ist eine CustomView die kannst Du im Desiger einfügen.

Im beiliegendem Programm habe ich zwei neue xTableLite hinugefügt.
Da kannst Du sehen wie man es machen kann.
 

Attachments

  • Tierschips3.zip
    29.9 KB · Views: 124

Heinz

Active Member
Licensed User
Longtime User
Ah, danke.
Habe jetzt auch festgestellt, daß sich die Breite des Table dynamisch einstellt,
wenn die Zeichenlänge z.B. bei Name zunimmt. Also, wenn ich einen längeren
Namen eingebe, wird auch das Table breiter.
Das war ich von der sonstigen PC-Programmierung so nicht gewohnt.
Was ich noch nicht gefunden habe :
Wo hast du die Beschriftungen der Columnheader (Chip-Nummer, Name, Eingangsdatum)
eingestellt. Da vermisse ich die Literale davon. Hab sie weder im Designer noch im
Quelltext gesehen. Oder habe ich da was übersehen ?
Tabelle.SetHeader(Array as String("A", "B", "C"))
hatte ich mal probeweise unter
Activity.LoadLayout("Layout")
gesetzt, aber da passiert nichts.

PS: Wie kann man denn einzelne der vielen externen Libraries laden,
deren Beschreibung unter Learn - Guides zu finden sind ?
Bin zwar registriert und eingeloggt, aber runter laden kann ich keine.
Geht das nur im Unterforum Additional Libraries ?
 

klaus

Expert
Licensed User
Longtime User
Wo hast du die Beschriftungen der Columnheader (Chip-Nummer, Name, Eingangsdatum)
Diese sind die Header in der Chips.csv Datei.
Falls Du andere Namen eingeben willst musst Du die Header in der Chips.csv Datei entfernen und mit
Tabelle.SetHeader(Array as String("A", "B", "C")) eingeben und
tblChips.LoadTableFromCSV(OrdnerName, DateiName, True)
durch
tblChips.LoadTableFromCSV(OrdnerName, DateiName, False)
ersetzen.
Wenn der letzte Parameter True ist wird die erste Zeile der csv Datei als Header genommen.

Du könntest auch die Listen der Länder und Hersteller in csv Dateien erstellen und die Tabellen gleich wie die Chips Tabell laden

PS: Wie kann man denn einzelne der vielen externen Libraries laden,
deren Beschreibung unter Learn - Guides zu finden sind ?
Da musst Du im Forum den Namen eingeben um die spezifisch Seite zu finden.
Beispiel Scrollview2D > da bekommst Du als ersten Vorschlag [Lib] ScrollView2D - Informatix
Und kannst Du die Library herunterladen.

Eine andere Möglichkeit ist in diesem Link:
Da findest Du fast alle Libraries mit einem Link zu der spezifischen Seite im Forum.
Die xTableLite Class findest Du nicht, die ist noch nicht veröffentlicht.
Ich hatte zu erst die B4A spezifische Table Class benutzt, bin dann aber auf die xTableLite Class umgestiegen, das ist die B4X 'Lite' Version der B 4A Table Class.
Die xTableLite Class ist eine 'leichte' Version der Table Class. Ich habe auch ein xTable Class, auch noch nicht veröffentlicht, diese ist die B4X Cross-Plattform Version der Table Class.
Die xTableLite Class hat etwas weniger Funktionen als die xTable (Table) Class damit sie leichter wird, und nicht all Benutzer brauchen Alle Möglichkeiten.
Die xTable und xTableLite werden in Zukunft auch als b4xlib Libraries zur Verfügung stehen, ist aber noch auf der 'to do' Liste.

Ich hatte auch ein B4XPages Projekt gemacht, da funktioniert aber die xTableLite Class nicht richtig in B4J.
Da habe ich jetzt die Länder und Hersteller Listen als csv Dateien erstellt.

Das könnte dann so aussehen.
 

Attachments

  • Tierschips4.zip
    33.4 KB · Views: 120

Heinz

Active Member
Licensed User
Longtime User
Ich hatte auch ein B4XPages Projekt gemacht, da funktioniert aber die xTableLite Class nicht richtig in B4J.
Da habe ich jetzt die Länder und Hersteller Listen als csv Dateien erstellt.
Freut mich, daß du die Länder- und Hersteller Listen auch gebrauchen kannst.
Dann hat sich meine Arbeit ja schon etwas gelohnt.
Auch vielen Dank und wieder etwas schlauer.
Dann kann es ja mit meiner App weitergehen.
Ein Menü mit 2 Menüpunkten habe ich schon eingebaut.
Meine Planung :
- Mit der Rück - Kamera ein Bild der Katze aufnehmen
und auf einem ImageView zeigen, speichern und in die
Zwischenablage kopieren.
- eine ausfüllbare PDF anzeigen, in der man das Bild
aus der Zwischenablage einsetzen kann. Angezeigt
und gespeichert kann die PDF auch gerne mit dem
kostenlosen AcrobatReader DC für ANDROID.

Das ganze habe ich schon für den PC mit XProfan gemacht.
Meine Cousine ist Vorsitzende in einem Katzenfreunde-Verein
und vermittelt selber Katzen.
Falls du so ein PDF-Formular brauchst, habe ich es hier angehängt.
Brauchst du dann nicht mehr selber machen.
Dort kann man alle möglichen Impfungen, Kastration usw. ankreuzen
bzw. eintragen und als neues PDF speichern. Auch an ein Logo +
Anschrift von einem Verein oder Tierschutzverband ist gedacht.
In Windows einfach in einem Viewer oder Paint in die Zwischenablage
kopieren und dann in die PDF an passender Stelle einfügen.

Am besten mache ich das mit einer zweiten Activity, die je nach
Menüpunkt die Kamera aktiviert oder das PDF öffnet.
 

Attachments

  • Formular.pdf
    75.5 KB · Views: 104

klaus

Expert
Licensed User
Longtime User
Freut mich, daß du die Länder- und Hersteller Listen auch gebrauchen kannst.
Ich hatte sie für Dich gemacht weil es mit de rB4J Version ganz einfach ist, mit einer Codezeile kann man die csv Dateien erstellen und in B4J hat man Zugriff von aussen, was in B4A mit File.DirInternal nicht der Fall ist.
Dachte dass es so schneller gemacht ist als wenn Du sie vielleicht umständlicher hättest erstellen müssen.
 

Heinz

Active Member
Licensed User
Longtime User
Kann man die beiden .csv Dateien (Länder + Hersteller) auch in den Projektordner Files
kopieren ? Werden die dann bei der Installation der .apk automatisch mit entpackt ?
Dann ist es ja auch kein Problem, sie in einer Schleife in Listen zu verfrachten.

PS:
Bei XProfan habe ich es ja auch einfach :
Move("FileToList", Datei)
Move("ListToHandle", Handle) oder Move("ListToArr", A[])
wobei Handle jede Art von Listen sein kann (Listbox, Gridbox, usw.)
 

Heinz

Active Member
Licensed User
Longtime User
So, habe mal weiter gemacht und will eine PDF mit dem Adobe Acrobat Reader
starten, den ich auch auf dem Phone habe.
Die Formular.Pdf habe ich in den Ordner Files gemacht, damit sie beim
Installieren der .apk mit installiert (kopiert) wird. Im Forum habe ich nun
folgendes gefunden :
So sieht meine 2. Activity aus:

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim xui As XUI
    Dim ph As Phone
    Dim pm As PackageManager
    Dim in As Intent
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    
    Private Back As Button
    Private Start As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Layout1")
    Activity.LoadLayout("Layout2")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Private Sub Start_Click
    in = pm.GetApplicationIntent("com.adobe.reader")
    If in.IsInitialized Then
        Dim FileName As String = "Formular.pdf"
        File.Copy(File.DirInternal, FileName, Starter.Provider.SharedFolder, FileName)
        Starter.Provider.SetFileUriAsIntentData(in, FileName)
        StartActivity(in)
    End If
End Sub

Private Sub Back_Click
    StartActivity(Main)
End Sub
Nun bekomme ich in der IDE folgende Fehlermeldung :
unbekanntes Mitglied: provider
Den PackageManager konnte ich über die Phone-Lib erreichen.
Was muß ich nun im Starter-Modul ändern, damit der Fehler
verschwindet ?
Ist halt immer problematisch, die Abhängigkeiten zu den Libs zu finden.
Notfalls könnte ich auch über einen Menüpunkt der 1. Activity den
Reader starten.
 
Last edited:
Top