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

klaus

Expert
Licensed User
Longtime User
Es kommt darauf an was Du machen willst:
- willst Du die gleiche Tastatur in einer anderen Form verwenden? dann geht ChangeParent. Dann musst Du aber noch die Routine ergänzen für die andern TextBoxen.
- willst Du die Tastatur wo anders hin kopieren ? das kann man nicht direkt im IDE machen, man aber mit einem Texteditor die *.sbp Datei ändern. Das heisst die ganzen Einträge für die Buttons kopieren und die Namen der neuen Form eintragen und den Buttons neue Namen geben.

Wie hast Du ChangeParent genützt ?
- im IDE, nur in der gleichen Form
- oder im Code auch auf eine andere Form
beides geht.

Hast Du für Panel1 ChangeParent verwendet oder für die Buttons ?

Im beiliegenden Programm hast Du ein Beispiel. Du muss noch die FormLib Library in den Programmordner kopieren.

Grüsse.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

danke für deine Hilfe und für dein Beispiel. Mit dem Beispiel kann man alles besser nachvollziehen.

... willst Du die gleiche Tastatur in einer anderen Form verwenden? dann geht ChangeParent. Dann musst Du aber noch die Routine ergänzen für die andern TextBoxen.
... das ist mir schon klar, aber ich kann machen was ich will, mit "change parent" kriege ich das nicht hin.

Wenn ich z.B. ein Panel (Panel1) habe und eine Textbox, dann kann ich diese Textbox ohne Probleme innerhalb einer Form auf ein anderes Panel (Panel2) mit "change parent" verschieben (aber nicht kopieren). Das funzt.

Wenn ich aber diese Textbox wie oben beschrieben von einer Form in eine andere Form verschieben oder kopieren will, dann geht das nicht.

Eigentlich möchte ich nicht von Form zu Form, sondern von einer Form in einem Modul zu einer anderen Form in einem anderen Modul kopieren oder wenigstens verschieben können.

Hast Du für Panel1 ChangeParent verwendet oder für die Buttons ?
Für Panel1.

Wie hast Du ChangeParent genützt ?
Das Erste - im IDE, nur in der gleichen Form.

- willst Du die Tastatur wo anders hin kopieren ?
Ich möchte die Tastatur in ein anders Modul kopieren und da benutzen.
In diesem Fall müßte ich doch nicht einmal das Panel und die Tasten neu umbenennen, oder?

Aber so wie das aussieht ist ein "einfaches Kopieren zu einem anderen Modul" nicht möglich.
 

klaus

Expert
Licensed User
Longtime User
Hallo JOTHA,

Wie schon gesagt direkt kopieren im IDE geht nicht !

Per Code geht es auch nicht. Ich habe versucht eine Tastatur per Code in 2 Formen in 2 verschiedenen Modulen zu erstellen. Man kann aber von einer Routine in einem Modul kein Control in einem anderen Modul erstellen ! Ist ja eigentlich auch normal denn das ist ja die Verkapselungsregel der Module.

Wenn Du im beiliegendem Code:
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]For[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] i=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1 [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]To [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]  AddPanel[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"Modul"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&i&[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]".frmModul"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&i,[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"Panel2"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],x0,y0,[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]5[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]*dd+[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]2[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]*dd+[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2])[/SIZE][/FONT]
[SIZE=2][FONT=Courier New]  x=[/FONT][/SIZE][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]0[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]  For[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] j=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]0[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]To[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]4[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]    AddButton[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"Modul"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&i&[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]".Panel2"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"btnTastatur"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&j,x,[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]0[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],dd1,dd1,j)[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]    AddButton[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]([/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"Modul"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&i&[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]".Panel2"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"btnTastatur"[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]&j+[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]5[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2],x,dd,dd1,dd1,j+[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]5[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2])[/SIZE][/FONT]
[SIZE=2][FONT=Courier New]    x=x+dd[/FONT][/SIZE]
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]  Next[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Next[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]
die Linie
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][SIZE=2][FONT=Courier New][COLOR=#0000ff][SIZE=2][FONT=Courier New][COLOR=#0000ff]For[/COLOR][/FONT][/SIZE][/COLOR][/FONT][/SIZE][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] i=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1 [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]To[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] 1[/SIZE][/FONT][/SIZE][/FONT]
durch
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][SIZE=2][FONT=Courier New][COLOR=#0000ff][SIZE=2][FONT=Courier New][COLOR=#0000ff]For[/COLOR][/FONT][/SIZE][/COLOR][/FONT][/SIZE][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] i=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1 [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]To [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]2[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]

ersetzt,bekommt man eine Fehlermeldung. Die 1 bedeutet Modul1 und die 2 Modul2.

Im 2ten Modul siehst Du nichts, weil nichts drin ist und die Tastatur nicht erstellt werden kann.

Aber verschieben geht ! Auch von einem Modul in ein anderes.

Beispiel liegt dabei.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,
Beispiel liegt dabei.
Leider kommt die Meldung (siehe Anhang).

Aber im Moment ist das auch nicht sooo wichtig, dann stelle ich die Tastatur eben neu zusammen.

Danke nochmals für deine Mühe!
 
Last edited:

JOTHA

Well-Known Member
Licensed User
Longtime User
... siehe Anhang ...
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,
Hier ist das Beispiel komplett.
nochmals Danke für deine Mühe, das Beispiel funktioniert jetzt (mit den Modulen), ich blicke allerdings nicht mehr durch.

Im Moment ist das ja auch nicht so wichtig, wie schon gesagt, werde ich die Tastatur nochmals neu erstellen. Bis ich mit anderen Lösungen durchkomme (und sie auch wirklich verstehe) brauche ich im Moment zu lange.

Aber eine andere Frage hätte ich:

Kann man mit den Werten einer ComboBox in deinem Code rechnen?

Ich habe schon einiges ausprobiert, aber immer ohne Ergebnis.
B4X:
Sub Globals
   Quelle = ""
   Gewicht = ""
   Karat = ""
   Ankauf = ""
   GewichtWert = ""
   KaratWert = ""
   AnkaufWert = ""
   Ergebnis = ""
End Sub
'------------------------------------------------------
Sub Goldankauf_Show
      
   Karat.SelectedIndex = 0
   Gewicht_GotFocus
   
   For i=0 To 9
   AddEvent ("ButtonPanel0" & i, Click, "Tastatur")
   Next
   AddEvent ("ButtonPanelKomma", Click, "Tastatur")
   AddEvent ("ButtonPanelBackspace", Click, "Tastatur")
   
End Sub
'------------------------------------------------------
' Die Tausenderpunkte und Kommas in ein deutsches Format konvertieren
'------------------------------------------------------
Sub Konvertieren(Zahl,Dezimalstellen)
    Zahl = Format(Zahl,"N"&Dezimalstellen)
      x = StrReplace(Zahl,".","!")  ' ändert vorläufig die Punkte
      x = StrReplace(x,",",".")     ' tauscht Kommas in Punkte aus
      x = StrReplace(x,"!",",")     ' tauscht Punkte in Kommas aus
      Return x
End Sub
'------------------------------------------------------
Sub ButtonErgebnisBerechnen_Click

   Sound ("SoundKasse.wav")
   
   If IsNumber(Gewicht.Text) = False Then
      Msgbox ("Bitte im Betrag nur ZAHLEN eingeben.")
      Ankauf.Text = "???"
      Gewicht.Text = "???"
   Else
      Ergebnis = (GewichtWert * AnkaufWert) '* KaratWert) '(Karatwert/1000))
      LabelErgebnis.Text = Konvertieren(Ergebnis,2)&" "& "EUR"
   End If
End Sub
'------------------------------------------------------
' Feld leeren, wenn auf in das Feld "Gewicht" geklickt wird
'------------------------------------------------------
Sub Gewicht_GotFocus
      Gewicht.Text = ""
   GewichtWert = ""
   Quelle = "Gewicht"
End Sub
'------------------------------------------------------
' Feld leeren, wenn auf in das Feld "Ankauf" geklickt wird
'------------------------------------------------------
Sub Ankauf_GotFocus
      Ankauf.Text = ""
   AnkaufWert = ""
   Quelle = "Ankauf"
End Sub
'------------------------------------------------------
' Wenn auf in das Feld "Internet" geklickt wird
'------------------------------------------------------
Sub ButtonInternet_Click
    i = Msgbox ("Soll ich den aktuellen Goldkurs aus dem Internet holen?", " Hinweis", cMsgboxYesNo, cMsgboxQuestion)
    If i = cYes Then
    Msgbox ("Diese Funktion steht momentan nicht zur Verfügung.", " Hinweis", cMsgboxOK, cMsgboxExclamation)
    Else
   End If
End Sub
'------------------------------------------------------
Sub Tastatur   
   Select Sender
   
   Case "buttonpanelkomma"
      Select Quelle
      Case "Gewicht"
         Gewicht.Text=Gewicht.Text&","
         GewichtWert=GewichtWert&"."
'      Case "Karat"
'         Karat=Karat&","
'         Karat=Karat&"."
      Case "Ankauf"
         Ankauf.Text=Ankauf.Text&","
         AnkaufWert=AnkaufWert&"."
      End Select
   
   Case "buttonpanelbackspace"
      Select Quelle
      Case "Gewicht"
         Gewicht.Text=SubString(Gewicht.Text,0,StrLength(Gewicht.Text)-1)
         GewichtWert=SubString(GewichtWert,0,StrLength(GewichtWert)-1)
'      Case "Karat"
'         Karat=SubString(Karat,0,StrLength(Karat)-1)
'         Karat=SubString(Karat,0,StrLength(Karat)-1)
      Case "Ankauf"
         Ankauf.Text=SubString(Ankauf.Text,0,StrLength(Ankauf.Text)-1)
         AnkaufWert=SubString(AnkaufWert,0,StrLength(AnkaufWert)-1)      
      End Select
   
   Case Else
      Select Quelle
      Case "Gewicht"
         Gewicht.Text=Gewicht.Text&StrAt(Sender,12)
         GewichtWert=GewichtWert&StrAt(Sender,12)
      Case "Karat"   
         Karat.SelectedIndex=Karat.SelectedIndex&StrAt(Sender,12)
         KaratWert=KaratWert&StrAt(Sender,12)
      Case "Ankauf"
         Ankauf.Text=Ankauf.Text&StrAt(Sender,12)
         AnkaufWert=AnkaufWert&StrAt(Sender,12)
      End Select
   
   End Select
End Sub
'------------------------------------------------------
Der Wert "Karat" kommt aus einer ComboBox.
  • Wenn ich in Zeile 44 den KaratWert deaktiviere, wird das Ergebnis korrekt aus den Werten Gewicht * Ankauf berechnet.
  • Wenn ich in Zeile 44 den KaratWert aktiviere, dann erhalte ich als Ergebnis immer "0,00"
  • Es ändert sich auch nichts, wenn ich in der Zeile 110 anstelle von "Karat" mit "Karat.SelectedIndex" oder "Karat.Text" arbeite.

Beispiel ist angehängt.

Was muß ich speziell bei der Rechnung mit Werten aus der ComboBox beachten?

... und eine Frage nebenbei:
Du hast immer die Rechenzeichen ohne Zwischenraum eng beieinander geschrieben. Hat das einen besonderen Grund? Beispiele:
Quelle=""
Gewicht.Text=Gewicht.Text&","
GewichtWert=GewichtWert&"."
Wenn man es so wie unten schreibt, finde ich es übersichtlicher:
Quelle = ""
Gewicht.Text = Gewicht.Text &","
GewichtWert = GewichtWert &"."
... oder gibt es dann (z.B. beim Kompilieren) irgendwelche Probleme später?
 

klaus

Expert
Licensed User
Longtime User
Hallo JOTHA,

Kann man mit den Werten einer ComboBox in deinem Code rechnen?

Ja, Du musst aber folgenden Code schreiben um den Kurswert aus der ComboBox zu erhalten.
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Sub [/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]Karat_SelectionChanged (Index, Value)[/SIZE][/FONT]
[SIZE=2][FONT=Courier New]  KaratWert = Value[/FONT][/SIZE]
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]End Sub[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]

Die Klammern in deinem Code für das Ergebniss sind unnütz, das reicht.
B4X:
[FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]Ergebnis = GewichtWert * AnkaufWert * KaratWert /[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1000[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]

... und eine Frage nebenbei:
Du hast immer die Rechenzeichen ohne Zwischenraum eng beieinander geschrieben. Hat das einen besonderen Grund?

Nein, beide Schriftarten sind möglich. Macht auch keinen Unterschied beim komplieren.
Der Grund ist Geschmacksache und bestimmt 'Faulheit' von mir, bin es jetzt so gewöhnt und stört mich eignentlich nicht mehr. In Visual Basic fügt der Editor automatisch ein Leerzeichen dazwischen. In Basic4PPC nicht.

Warum hast Du eigentlich deine Form in ein neues Modul eingfügt und nicht im Main Modul gelassen, denn da ist ja vorläufig gar nichts drin ?

Beiliegend der geänderte Code.

Grüsse.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

vielen Dank, jetzt funzt es!

Mit einer kleinen Änderung "spart" man sich auch noch 1 Klick auf das "=" Zeichen:
B4X:
Sub Karat_SelectionChanged (Index, Value)
   KaratWert=Value
   ButtonErgebnisBerechnen_Click
End Sub

zu deiner Frage ...
Warum hast Du eigentlich deine Form in ein neues Modul eingfügt und nicht im Main Modul gelassen, denn da ist ja vorläufig gar nichts drin ?
... ich möchte später den Devisenrechner und den Goldankauf zusammenführen. Wenn ich beide schon als Modul habe, geht das einfacher und ich muß nur noch von der "Main" die Verknüpfungen machen.

Wenn das Ganze fertig ist, stelle ich es hier ins Forum.
 

klaus

Expert
Licensed User
Longtime User
Hallo JOTHA,

Was ist eigentlich der Unterschied zwischen den beiden Programmen, von der Formdarstellung meine Ich. Wenn die verschiedenen Controls oder Felder die gleichen sind könnte man das Ganze mit bloss einer Form machen und nur die Benennungen ändern und die Defaultwerte neu aufbauen. Man könnte auch mit 2 Panels im oberen Bereich arbeiten eins füf Goldaufkauf und das ander für den Devisenrechner und je nach bedarf das eine oder das andere anzeigen, der untere Bereich würde gleich bleiben für die Tastatur.

Muss dann eigentlich die Devisenrechung mit in die Goldkursrechnung einbezogen werden ? Dann könnte es vorteilhaft sein beides in einer einzelnen Form unter zu bringen und Alles gleichzeitig zur Verfügung zu stehen.

Aber es gibt ja immer mehrere Lösungen für ein gleiches Problem.

Grüsse.
 
Last edited:

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

die Idee ist mir noch gar nicht gekommen:
Man könnte auch mit 2 Panels im oberen Bereich arbeiten eins füf Goldaufkauf und das ander für den Devisenrechner und je nach bedarf das eine oder das andere anzeigen, der untere Bereich würde gleich bleiben für die Tastatur.
... aber ziemlich sicher wird das Ganze ja noch um ein 3. oder 4. Modul erweitert, und dann wird das Programmieren auf einer Form schon umständlicher, deshalb die Aufteilung in mehrere Module.

Module wie z.B.: Mehrwertsteuer Brutto/Netto, Zoll in cm, Karat in Gewicht, Kilometer in Meilen, Gallonen in Liter, u.s.w. wären denkbar ...

Der Hintergrund: Ich haben einen guten Bekannten, der Juwelier ist. Oft muß er den Goldankauf berechnen, manchmal hat er Kunden, die in USD bezahlen wollen und manchmal muß er einfach mal die Mehrwertsteuer Brutto oder Netto berechnen, u.s.w.

Aus diesem Grund habe ich für Ihn dieses kleine Tool gemacht.

Es sollen nicht allzuviele Informationen auf einer Seite kommen, da das Programm auf seinem Handy laufen soll (wenig und kleine Displayfläche) und man auch noch was erkennen soll (auch ältere Kunden, die nicht mehr so gut sehen).

An die Berechnung mit dem Goldankauf in USD habe ich auch schon gedacht, aber wegen der Übersichtlichkeit mache ich dann einfach eine "Übergabe" des Ergebnisses auf das Modul "Devisenrechner".

Aber wie Du schon gesagt hast:
... es gibt ja immer mehrere Lösungen für ein gleiches Problem.
 

klaus

Expert
Licensed User
Longtime User
Noch eine Frage:
Warum alles in Module aufteilen, man kann im Hauptmodul auch mehrere Forms einfach verwalten, Ich glaube nicht dass Dein Programm so umfangreich wird dass sich die Module 'rentieren', ausser Du möchtest später diese Module in andere Programme übernehmen. Die Modulprogrammierung ist etwas umständlicher als nur mit einem, dem Hauptmodul.

Verstehe aber bitte nicht dass Ich etwas gegen die Modulprogrammierung hätte, ganz im Gegenteil, nur muss es sich, von meiner Sicht aus gesehen, auch rentieren.

Wenn man von Benutzeroberfläche spricht, bin Ich mit Dir einverstanden, dass nicht zu viel auf einen Bildschirm kommen soll damit es übersichtlich bleibt. Aber auf der anderen Seite sehe Ich gerne wenn alle Informationen die Ich für eine bestimmte Aufgabe brauche, auf der gleichen Seite sind.
Ist natürlich immer ein Kompromiss.

Aber wie gesagt . . .

Grüsse.
 
Last edited:

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,
... ausser Du möchtest später diese Module in andere Programme übernehmen.
das ist der eine Punkt.

Der andere ist, das ich festgestellt habe, daß die Programmierung auf dem Pocket-PC ab einer gewissen Textgröße gar nicht mehr möglich ist. Das hatte ich schon mal ganz am Anfang in einem Thread geschrieben. Der PPC hatte sich einfach "aufgehängt".

Wenn ich mir das Progammieren in mehrere Module angewöhne, kann ich evtl. dieses Problem umgehen.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
... die SIP-Tastatur geht jetzt aber nicht ...

Hallo Klaus,

noch eine Zusatzfrage hätte ich.

Die virtuelle (eigene) Tastatur funktioniert, aber die eingebaute SIP-Tastatur geht jetzt nicht mehr.

Sie erscheint, wenn man sie aktiviert, man kann damit auch Eingaben machen, aber beim berechnen kommt als Ergebnis "0,00 €" heraus.

Kann man die SIP zusätzlich aktivieren oder geht jetzt nur noch die (eigene) Tastatur?
 

klaus

Expert
Licensed User
Longtime User
Nach meinem Wissen kannst Du leider nicht beide Tasaturen zur gleichen Zeit auf die gleiche Textbox orientieren. Entweder die eine oder die andere. Wenn die virtuelle Tastatur aktiv ist und Du Ziffern ein gibst kommen diese in die TextBox aber sobald Du auf eine Taste Deiner Tastatur klickst, verliert die Textbox den Focus und weitere Eingaben von der virtuellen Tastatur werden nicht mehr erfangen.

Grüsse.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

genau so dachte ich mir das auch.

Danke für die Bestätigung - dann suche ich nicht weiter nach einer evtl. Lösung.

Die eine Tastatur reicht ja auch ...
 

klaus

Expert
Licensed User
Longtime User
Die eigene Tastatur hat auch den Vorteil dass Du begrenzen kannst was der Benützer eingeben darf und nicht. Ansonsten müsstest Du die Buchstaben die von der virtuellen Tatstur reinkommen noch überprüfen ob sie dem entsprechen was Du brauchs, um das Ganze 'idiotensicher' zu machen. Die Erfahrung zeigt, dass wenn der Benützer einen Fehler machen kann, dann macht er den auch ! Ich selbst inbegriffen.
In Deinem Fall, zum Beispiel könntest Du die Kommataste verriegeln wenn schon mal eins eingegeben wurde.

Aber das kann man immer noch später einfügen.

Grüsse.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Die eigene Tastatur hat auch den Vorteil dass Du begrenzen kannst was der Benützer eingeben darf und nicht. Ansonsten müsstest Du die Buchstaben die von der virtuellen Tatstur reinkommen noch überprüfen ob sie dem entsprechen was Du brauchs, um das Ganze 'idiotensicher' zu machen.
Richtig. In diesem Fall sind ja dann auch die folgenden Zeilen völlig unnnütz:
B4X:
If IsNumber(Gewicht.Text) = False Then
Msgbox ("Bitte bei Gewicht nur ZAHLEN eingeben.")
Gewicht.Text = "???"
... man kann ja nur die vorgegebenen Ziffern eingeben.

Wie man verhindert, daß ein Komma doppelt eingegeben wird, wäre zwar nicht primär wichtig, aber doch interessant.
 

klaus

Expert
Licensed User
Longtime User
Hallo JOTHA,

Die Kommataste Verriegelung kannst Do so machen:

In jede xxx.GotFocus Routine
B4X:
[FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]ButtonPanelKomma.Enabled=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]True[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]
einfügen.

In der Tastatur_Click Routine
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Case[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"buttonpanelkomma"[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]ButtonPanelKomma.Enabled=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]False[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]
einfügen.

Und in der Tastatur_Click Routine in Case "buttonpanelbackspace" für jede Quelle
B4X:
[FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Case[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"buttonpanelbackspace"[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Select[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2] Quelle[/SIZE][/FONT]
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Case[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]"Devise"[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]StrAt[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2](DevisenWert1.Text,[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]StrLength[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2](DevisenWert1.Text)-[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]1[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2])=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000][FONT=Courier New][SIZE=2][COLOR=#800000]","[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][FONT=Courier New][SIZE=2]ButtonPanelKomma.Enabled=[/SIZE][/FONT][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080][FONT=Courier New][SIZE=2][COLOR=#800080]True[/COLOR][/SIZE][/FONT]
[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff][FONT=Courier New][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT][/COLOR][/SIZE][/FONT]
einfügen. Das aktiviert die Kommataste wieder wenn das Komma gelöscht wurde.
Grüsse.
 

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

nochmals Danke für alle deine Mühen.

Das mit dem Komma werde ich später nochmals aufgreifen, ich hatte dabei schon wieder Fehlermeldungen. Sicher habe ich den Code wieder falsch zusammengestellt.

Hier ist die Einfügung deiner Vorschläge (nur zur Info):
B4X:
Sub Tastatur   
   Select Sender
   
   Case "buttonpanelkomma"
       ButtonPanelKomma.Enabled = False
      Select Quelle
      Case "Gewicht"
         Gewicht.Text=Gewicht.Text&","
         GewichtWert=GewichtWert&"."
      Case "Ankauf"
         Ankauf.Text=Ankauf.Text&","
         AnkaufWert=AnkaufWert&"."
      End Select
   
   Case "buttonpanelbackspace"
      Select Quelle
      Case "Gewicht"
      
      IfStrAt(Gewicht.Text,StrLength(Gewicht.Text)-1)=","Then
      ButtonPanelKomma.Enabled = True
'      End If
      
         Gewicht.Text=SubString(Gewicht.Text,0,StrLength(Gewicht.Text)-1)
         GewichtWert=SubString(GewichtWert,0,StrLength(GewichtWert)-1)
      
      Case "Ankauf"

      IfStrAt(Ankauf.Text,StrLength(Ankauf.Text)-1)=","Then
      ButtonPanelKomma.Enabled = True
'      End If
      
         Ankauf.Text=SubString(Ankauf.Text,0,StrLength(Ankauf.Text)-1)
         AnkaufWert=SubString(AnkaufWert,0,StrLength(AnkaufWert)-1)      
      End Select
      
   Case Else
      Select Quelle
      Case "Gewicht"
         Gewicht.Text=Gewicht.Text&StrAt(Sender,12)
         GewichtWert=GewichtWert&StrAt(Sender,12)
      Case "Ankauf"
         Ankauf.Text=Ankauf.Text&StrAt(Sender,12)
         AnkaufWert=AnkaufWert&StrAt(Sender,12)
      End Select
   
   End Select
End Sub

Ich habe allerdings im Moment ein anderes (wichtigeres Problem). Es hat etwas mit der Umwandlung in die "deutsche" Zahlenansicht zu tun.
specci48 hat mich in diesem thread schon darauf hingewiesen, daß man mit den umgewandelten Zahlen später nicht mehr weiterrechnen kann.

Aus diesem Grund (und noch einem anderen) habe ich mit zwei Zahlen gearbeitet, und zwar mit "LabelErgebnis1A" und mit "LabelErgebnis1B".
Dabei dachte ich an die Konvertierung, wobei ich einfach "LabelErgebnis1A" nicht konvertieren wollte, um dann damit an anderer Stelle (im Modul Zusammenfassung) weiterzurechnen.

Im Code (ab Zeile 43) habe ich mir das so gedacht wie unten, aber wahrscheinlich wird die Zahl vorher schon woanders konvertiert, sodaß eine weitere Berechnung mit dieser Zahl nicht möglich ist.
B4X:
Sub ButtonErgebnisBerechnen_Click
   Sound ("SoundKasse.wav")
   Ergebnis = Gewicht1Wert * AnkaufWert * Karat1Wert /1000
   LabelErgebnis1A.Text = (Ergebnis,2)
   LabelErgebnis1B.Text = Konvertieren(Ergebnis,2)&" "& "€"
   LabelErgebnis1A.Visible = False
   LabelErgebnis1B.Visible = True
   LabelErgebnis1A_Click
End Sub
Logischerweise kommt die Meldung "... falsches Format ...".

Ich habe ein Beispiel mit 2 Modulen Goldankauf beigefügt, später sollen das 7 Module werden, mit der Möglichkeit am Ende in der Zusammenfassung alle Posten als Liste zu sehen und das Gesamtergebnis als Summe berechnet zu bekommen.

Ich meine, es ist ganz schön umständlich mit B4P solche Berechnungen anzustellen (mit der ganzen Hin- und Her-Umwandlung), bei anderen Entwicklungsumgebungen geht das viel einfacher ... das ist so ein kleines Manko.

Ich will aber B4P nicht schmälern, es ist eine Super-Software!

Vielleicht wird das in Zukunft in einem Release ja verbessert.
 
Top