German Sub in Modul

HGGER

Member
Licensed User
Longtime User
Hallo zusammen.

Ich versuche eine Berechnung in einem Modul durch zuführen.
Ich habe schon alle möglichen Dinge versucht. Leider war nicht erfolgreich.
Ich benutze B4A noch nicht so lange, hätte aber nicht gedacht, dass es
so schwierig ist, eine Sub in einem Code Modul aufzurufen.

Error description: Syntax error.
Occurred on line: 6
Sub Rech(a1 As Int, b1 As Int) As Int

Eventuell kann mir jemand weiterhelfen.

Danke schon mal im Voraus.

Heinz
 

Attachments

  • WorkHG.zip
    14.4 KB · Views: 196

kopperfeld

Member
Licensed User
Longtime User
Hallo HGGER,

die Sub muss "frei" stehen, dann geht es:

Sub Process_Globals

End Sub

Sub Rech(a1 As Int, b1 As Int) As Int
Return a1 + b1
End Sub

In "Process_Globals" kommen nur globale Variablen- und Type-Definitionen rein,
jedoch keine Subs, z.B.:

Dim m_a1 as Int
Dim m_a2 as Int
...
 
Last edited:

HGGER

Member
Licensed User
Longtime User
Sub in Modul funktioniert

Hallo kopperfeld!
Danke für die rasche Antwort.
Hat wunderbar funktioniert. Ich hätte wahrscheinlich noch lange gesucht.

Gleich noch eine Frage:
Kann ich im Code Modul auch ein Eingabefeld von der Activity abfragen z. B.
Dim Test as String
Test = Activity.Eingabefeld.text

Gruß

Heinz
 

kopperfeld

Member
Licensed User
Longtime User
ja, hab auch erst im Dezember angefangen, aber schon ein paar 'Startschwierigkeiten' ausgeknobelt - b4a hat wirklich so ein, zwei kleine Eigenheiten mit denen man sich erst anfreunden muss (ich zumindest^^).

Leider kannst du im Code-Modul keine View-Objekte (wie die Activity) direkt ansprechen oder (als Global-Variable) anlegen. View-Objekte müssen in der Main (oder anderen Klassen) deklariert werden. Main-Variablen sind jedoch von Code-Modulen aus gesehen verdeckt (nicht sichtbar), d.h. du kannst z.B. "Main.Activity.invalidate" nicht ausführen.
Seit kurzem kenn' ich aber zwei Lösungsmöglichkeiten aus diesem 'Dilemma':

1. Lösung: Man muss die Code-Modul-Sub vom Main-Modul aus aufrufen und Activity als Parameter übergeben:

Public Sub readText(act as Activity) as String

Dim text as String = act.Eingabefeld.text
Return text
End Sub

2. Lösung: Anstelle eines Code-Moduls, wie schon angesprochen ein Klassen-Modul verwenden, denn in Klassen können Activites und andere View-Objekte als Global-Variablen deklariert werden. (die Lösung hat mir Erel von Anywhere Software gezeigt). Allerdings sind Klassen für den Anfang, besonders für Programmiereinsteiger und kleine Projekte, vielleicht etwas überdimensioniert, denn man muss sie z.B. initialisieren usw., so das es der Einfachheit halber Code-Module auch tun sollten. Ich hab bis vor 2 Wochen selber nur Code-Module verwendet und war alles prima..

Kommst du damit weiter?
 
Last edited:

HGGER

Member
Licensed User
Longtime User
Control in Modul

Ja, die Lösung 1 hört sich gut an und scheint für meine Projekte, meist kleiner Utilities, die beste Lösung zu sein. Ich möchte nicht zuviel Code in der Activity haben, da es sonst so unübersichtlich wird. Nochmals danke für die schnellen Antworten.

Gruß
Heinz
 

HGGER

Member
Licensed User
Longtime User
Wo steht der Aufruf in der Activity

Hallo Kopperfeld!

Beim Versuch die Sub so aufzurufen wie in der letzten Post beschrieben,
funktioniert die Sache nicht. Der Compiler meldet einen Fehler in der Sub.
Wahrscheinlich stehen die Dinge an der falschen Stelle.

Sub Activity_Create(FirstTime As Boolean)
Public Sub readText(act As Activity) As String
End Sub

Sub readtext
Dim text As String = act.Eingabefeld.text
Return text
End Sub

Kannst du mir nochmals weiterhelfen?

HGGER
 
Top