German Andere (eigene) Tastatur: Wie bekomme ich die Tastenklicks in das Textfeld?

JOTHA

Well-Known Member
Licensed User
Hallo Forum,

ich habe schon nach einer Lösung hier im Forum gesucht, bin aber leider nicht fündig geworden.

Für einen kleinen Devisenrechner möchte ich eine eigene Tastatur verwenden.

1) Ich möchte größere Tasten haben.
2) Es sollen nur die Tasten vorhanden sein, die tatsächlich benötigt werden.
3) Es soll das "Problem" mit der Eingabe eines Punktes (.) anstelle des Kommas (,) umgangen werden, sonst rechnet das Programm falsch.

Was mich aber jetzt interessiert ist folgendes:

A) Wie bekomme ich die Tastenklicks in das Textfeld?
Erklärungsbeispiel: Ich drücke auf "1" und dann soll im Textfeld die "1" erscheinen, dann drücke ich die "2" und es soll die "2" hinter die "1" geschrieben werden.

Anbei habe ich die Applikation angehängt.

Falls das jemand weiß: Später möchte ich noch die aktuellen Kurse über das Internet laden ...

... bin für jede Hilfe und jeden Hinweis dankbar!
 

Attachments

JOTHA

Well-Known Member
Licensed User
Hallo Filippo,

vielen Dank für deine Hilfe. Ich habe gerade dein Beispiel heruntergeladen und spiele mal damit herum.

Das mit den Buttons habe ich zuerst mit "Button" und nicht mit "ImageButton" gemacht, da ich noch keine passenden Images für die Tastatur habe. Später will ich das aber noch ändern.

Hat jemand einen Tip, wo ich skalierbare (am besten auf 41 Pixel) Zahlen- oder Tastatur-Buttons als Image (bmp, png, jpg, ...) herbekomme?

Mal nebenbei: Warum arbeitest Du noch mit 6.1?

... so, jetzt gibt es erstmal Mittagessen, die Familie ruft ...
 

specci48

Well-Known Member
Licensed User
Hallo JOTHA,

wenn du immer den Betrag und niemals den Kurs eingeben möchtet, d.h. den letzteren immer über das Internet ermittelst, dann kann man das z.B. auch über ein gemeinsames ClickEvent regeln:

B4X:
Sub App_Start
    Devisenrechner.Show
   ComboBoxDevise1.SelectedIndex = 1
   ComboBoxDevise2.SelectedIndex = 0
   
   ' ClickEvents an sämtliche Zahlen
   For i = 0 To 9
      AddEvent ("ButtonPanel0" & i, Click, "TastaturSub")
   Next
   ' und an das Komma
   AddEvent("ButtonPanelKomma", Click, "TastaturSub")
End Sub

Sub TastaturSub
   DevisenWert1.Text = DevisenWert1.Text & Sender.Text
End Sub
Allerdings würde mir persönlich dann noch ein Button zum Löschen einer Falscheingabe fehlen.


Gruß
specci48
 

JOTHA

Well-Known Member
Licensed User
@ Filippo: Ich habe jetzt deine Applikation ausprobiert, aber mit meinem Thema (eigene Tastatur anstatt SIP) hat das nicht viel zu tun, die Frage ist also noch offen ...

Trotzdem Danke für deine Mühe.
 

klaus

Expert
Licensed User
Hallo JOTHA,

Das könnte so aussehen, specci48's Vorschläge sind mit drin.
Es gibt natürlich für jedes Problem mehrere Lösungen.

Grüsse.
 

Attachments

JOTHA

Well-Known Member
Licensed User
Hallo specci48,

danke für deine Hilfe, damit bin ich schon ein großes Stück weitergekommen.

... wenn du immer den Betrag und niemals den Kurs eingeben möchtet, d.h. den letzteren immer über das Internet ermittelst ...
genau das soll ja möglich sein. Entweder per Hand eingeben (wenn kein Internet zur Verfügung steht - oder zu teuer ist), oder übers Internet den Wert automatisch beziehen.

... dann kann man das z.B. auch über ein gemeinsames ClickEvent regeln:
Daraus resultiert die nächste Frage: Wie mache ich das, wenn ich die Tastatur auch im Feld "Kurs" anwenden will? Generiere ich dann einen neuen Code extra für dieses Feld?

Allerdings würde mir persönlich dann noch ein Button zum Löschen einer Falscheingabe fehlen.
Dafür habe ich dann das folgende gemacht:
B4X:
'------------------------------------------------------
' Feld leeren, wenn auf in das Feld "DevisenWert1" geklickt wird
'------------------------------------------------------
Sub DevisenWert1_GotFocus
      DevisenWert1.Text = ""
End Sub
Das "spart" mir dann den Platz für eine "C-Taste".
 

JOTHA

Well-Known Member
Licensed User
Hallo Klaus,

... ihr seid ja mit euren Antworten schneller wie ich mit dem Ausprobieren ...
Das könnte so aussehen, specci48's Vorschläge sind mit drin. Es gibt natürlich für jedes Problem mehrere Lösungen. Grüsse.
... jetzt öffne ich erstmal deinen Vorschlag und dann melde ich mich wieder ...
 

JOTHA

Well-Known Member
Licensed User
Hallo Klaus,

deine Lösung ist bereits perfekt! Vielen Dank!

Jetzt muß ich nur noch herausfinden, wie ich die Devisenkurse über das Internet automatisch beziehe.

1) Weiß jemand eine Internet-Adresse, wo das automatisch und kostenlos geht?
2) An der Lösung, wie ich ins Internet komme und die Daten "abhole" arbeite ich schon, Hilfe ist aber sehr gerne wilkommen!
 

Filippo

Expert
Licensed User
Hallo JOTHA,

Mal nebenbei: Warum arbeitest Du noch mit 6.1?
für das was ich mache reicht mir voll und ganz.

Filippo: Ich habe jetzt deine Applikation ausprobiert, aber mit meinem Thema (eigene Tastatur anstatt SIP) hat das nicht viel zu tun, die Frage ist also noch offen ...
für die eigene Tastatur nicht aber für eine korrekte Eingabe! Den man kann definieren ob in eine Textbox nur Buchstaben, nur Integer-Zahlen oder nur Decimal-Zahlen erlaubt sind.

Ciao,
Filippo
 

specci48

Well-Known Member
Licensed User
Hallo Klaus,

eine Frage:
Warum hast Du bei meinem Beispiel aus jedem
B4X:
Sender.Text
ein
B4X:
StrAt(Sender,12)
genacht :confused:

Somit
- musst Du nun Komma und Zahlen unterscheiden
- kann man weitere Buttons nur schwer ergänzen, da man diese dann auch wieder einzeln unterscheiden muss

Außerdem bin ich mir nicht sicher, ob der Zugriff über Sender.Text nicht schneller wäre...


Gruß
specci48
 

JOTHA

Well-Known Member
Licensed User
@Filippo:
... für die eigene Tastatur nicht aber für eine korrekte Eingabe! Den man kann definieren ob in eine Textbox nur Buchstaben, nur Integer-Zahlen oder nur Decimal-Zahlen erlaubt sind...
Da hast Du allerdings recht.
Ich habe für den Fall, daß jemand Buchstaben eingeben sollte, die folgende MsgBox definiert:
B4X:
If IsNumber(DevisenWert1.Text) = False Then
        Msgbox ("Bitte im Betrag nur ZAHLEN eingeben.")
      Kurs.Text = "???"
      DevisenWert1.Text = "???"
In diesem Fall wird die Fehleingabe durch die Fragezeichen ersetzt.
Bei Gelegenheit probiere ich aber schon mal deine Lösung aus. Man lernt ja nie aus!

Danke nochmals für deine Anregung.
 

klaus

Expert
Licensed User
Hallo specci48,

Warum ich StrAt(Sender,12) gewählt habe anstatt Sender.Text, weil JOTHA später mit ImageButtons arbeiten will und da vieleicht die Texte nicht mehr drin sind. Solange er mit Buttons arbeitet geht es. Das Komma zu unterscheiden hat den anderen Vorteil dass ich den DevisenWert1.Text mit einem Komma ergänze und eine 2te Variable mit einem Punkt für die Rechnungen, kam mir einfacher vor als eine 2te Konvertierungs Routine Komma-Punkt.

Grüsse,
 

specci48

Well-Known Member
Licensed User
... weil JOTHA später mit ImageButtons arbeiten will und da vieleicht die Texte nicht mehr drin sind...
Ups, dieser Umstand ist mir irgendwie entfallen. Gut, wenn wenigstens einer hier aufpaßt... ;)

Gruß
specci48
 

klaus

Expert
Licensed User
Das ist ja das Schöne wenn mehrere mitmachen, das gibt eben interessante Meinungaustausche. Und wie schon angedeutet, es gibt ja immer mehrere Lösungen. Und die optimale Lösung ist immer ein Kompromiss je nach den Bedingungen die gegeben sind oder die man sich gibt.

Beste Grüsse.
 

JOTHA

Well-Known Member
Licensed User

JOTHA

Well-Known Member
Licensed User
Zusatzfrage: Wie kann ich die Tastatur woanders verwenden?

Hallo erstmal ...

Wie kann ich die Tastatur woanders verwenden?

Ich habe zwar in schon einiges hier verstreut im Forum gelesen, aber mit "change parent" funktioniert das bei mir irgendwie nicht.

Ich habe jetzt schon mit "kopieren", "doppelt öffnen", "umbenennen + kopieren", "change parent" u.s.w. schon so viel Zeit investiert, da hätte ich die Tastatur schon 10 mal von Hand neu geschrieben und zusammengstellt. :sign0148:

:confused:
 
Top