Metacard - Programmieren ganz einfach, Teil 3

Final Countdown

In den vergangenen Folgen haben wir Ihnen gezeigt, wie Sie Metacard bedienen und erste kleine Programme schreiben. Im dritten und letzten Teil beschäftigen wir uns mit Funktionen und Prozeduren – der krönende Abschluss wird eine komplette Adressverwaltung sein, den Sie mit den in dieser Serie gezeigten Mitteln selbst schreiben können.

Funktionen und Prozeduren

Funktionen und Prozeduren sind Programmteile, die unter einem Namen ansprechbar sind. Der Vorteil von einer Programmierung mit Funktionen und Prozeduren ist, dass Programmcode, der oft benötigt wird, nicht jedesmal neu geschrieben werden muss. Außerdem behält der Programmierer mit Funktionen und Prozeduren die Übersicht über ein umfangreiches Projekt. Metacard bringt bereits eine ganze Reihe vordefinierter Funktionen mit. Die wichtigsten Funktionen sind in Tabelle 4 aufgelistet. An dieser Stelle will ich zunächst einmal zeigen, wie Sie eigene Funktionen und Prozeduren in Metatalk programmieren und natürlich auch aufrufen. Wenn Sie den Artikel bis zu dieser Stelle durchgelesen haben, sind Sie bereits auf eine Prozedur gestoßen, ohne es zu merken. Bei der Nachrichtenbearbeitung haben Sie Ihren Programmtext zwischen folgende Zeilen geschrieben:

On mouseUp
…
End mouseUp

Somit haben Sie bereits eine Prozedur erstellt. Im wesentlichen kennzeichnen Sie eine Prozedur mit den beiden Wörtern 'On' und 'End', gefolgt von dem Prozedurnamen, den Sie so wählen sollten, dass Sie mit keinen bestehenden Funktionen, Prozeduren und Nachrichten in Konflikt kommen. Bei der Definition einer Prozedur kann hinter dem Namen eine Parameterliste angegeben werden. In einem Beispiel betrachtet sähe eine Prozedur dann etwa so aus:

On addieren zahl1, zahl2
        put zahl1 + zahl2 into ergebnis
End addieren

Der Prozedur 'addieren' werden zwei Variablen als Parameter übergeben, die anschließend addiert werden und in der Variablen 'ergebnis' gespeichert werden. Der entsprechende Prozeduraufruf lautet:

addiere 2, 3

Jetzt, wo Sie die Arbeitsweise von Prozeduren kennen, werden Sie sich sicherlich Fragen, in welcher Weise sich Funktionen von Prozeduren unterscheiden. Im Wesentlichen gibt es nur einen Unterschied: Funktionen müssen immer einen Wert zurückgeben. Der Befehl, der Werte zurückliefert, heißt 'return'. Nachdem ein 'return' ausgeführt wurde, wird die Bearbeitung der Funktion sofort beendet und zum normalen Programmablauf zurückgekehrt. Bei der Definition einer Funktion gibt es in der Schreibweise ebenfalls einige Unterschiede. Zum Vergleich schreiben wir die Prozedur 'addieren' nun als Funktion:

function addieren zahl1, zahl2
        put zahl1 + zahl2 into ergebnis
        return ergebnis
end addieren

Bei dem Funktionsaufruf können Sie auf zwei verschiedene Weisen vorgehen. Entweder Sie schreiben direkt:

put addieren(2,3) into zahl

Oder Sie schreiben:

get addieren (2,3)
put it into zahl

In jedem Fall wird der Rückgabewert der Variablen 'zahl' zugewiesen. Diese Vorgehensweise ist bei Prozeduren nicht möglich.

Jetzt müssen Sie lediglich noch wissen, in welchem Script-Programm Sie Ihre Funktionen bzw. Prozeduren unterbringen. Script-Programme von Objekten wie z.B. Buttons oder Textfelder sind hierfür meist schlecht geeignet, da alle Funktionen und Prozeduren, die innerhalb dieser Skripte definiert sind, auch nur innerhalb dieser Skripte aufgerufen können. Besser ist oftmals der Platz im Kartenskript oder im Stackskript, da so alle Funktionen innerhalb der ganzen Karte bzw. innerhalb des ganzen Stacks von allen Objekten aufgerufen werden können.

Tabelle 4 : vordefinierte Funktionen in Metatalk (Auszug)

abs([zahl1]) Liefert den absoluten Betrag einer Zahl.
atan([zahl1]) Von einer im Bogenmaß angegebenen Zahl wird der Arcus Tangens berechnet.
average([zahl1],[zahl2], … , [zahl n]) Liefert den Durchschnitt einer Reihe von Zahlen.
cos([zahl1]) Der Kosinus eines Winkels im Bogenmaß
exp([zahl1]) Berechnet e hoch zahl1.
ln([zahl1]) Berechnet den natürlichen Logarithmus zur Basis e.
max([zahl1],[zahl2], … , [zahl n]) Findet die größte Zahl einer Reihe.
min([zahl1],[zahl2], … , [zahl n]) Findet die kleinste Zahl einer Reihe.
sin([zahl1]) Liefert den Sinus eines Winkels, der im Bogenmaß angegeben ist.
sqrt([zahl1]) Berechnet die Quadratwurzel einer Zahl.
sum([zahl1],[zahl2], … , [zahl n]) Addiert eine Reihe von Zahlen.
tan([zahl1]) Berechnet den Tangens einer Zahl im Bogenmaß.
trunc([zahl1]) Schneidet von einer Zahl die Nachkommastellen ab.

Das Finale

Mit dem erworbenen Wissen können Sie jetzt ein vollständiges Programm unter Metacard realisieren. Das Erstellen eines kompletten Programms wollen wir hier am Beispiel einer Adressverwaltung demonstrieren. Sie werden merken, dass weder das Erstellen der grafischen Benutzeroberfläche, noch das eigentliche Programmieren Probleme macht.

Starten Sie Metacard und legen Sie einen neuen Stapel Ihrer Wahl an. Wenn Sie nun das leere Fenster sehen, können Sie mit dem Entwurf der grafischen Oberfläche beginnen. Abbildung 1 zeigt die Benutzeroberfläche der Adressverwaltung.

Abbildung 1: So könnte Ihre Adressverwaltung auch aussehen!

Wie Sie sehen, besteht die Karte aus 9 Textfeldern, 8 Beschriftungen und 4 Schaltflächen. Die Textfelder tragen dieselben Namen wie die nebenstehenden Beschriftungen. Die 8 Beschriftungen sind mit dem Rechteck-Zeichen-Werkzeug erstellt worden. Damit nur der Text angezeigt wird, müssen auf dem Eigenschaften-Dialog noch zwei kleine Anpassungen vorgenommen werden. Unter dem Register "Appearance" muss die Option "Show Name" angewählt werden, damit der unter "Label" angegebene Name als Beschriftung verwendet wird. Außerdem sollte "lineSize" auf 0 gestellt werden, da der Text sonst eingerahmt erscheint.

Um sicher zu gehen, dass alle Textfelder die gleiche Größe besitzen, kann mit der Strg-Taste eine Kopie von einem beliebigen Objekt erzeugt werden. Halten Sie hierzu die Strg-Taste gedrückt und ziehen Sie das gewünschte Objekt an die entsprechende Stelle im Kartenfenster. Anstatt einer einfachen Verschiebung wird das Objekt jetzt kopiert.

Erstellen Sie nun noch die vier Schaltflächen. Um bei einer Schaltfläche ein Icon zu verwenden, können Sie im Eigenschaftsdialog auf der Registerkarte "Extras" unter der Option "Icon" eine Auswahl treffen.

Haben Sie nun die grafischen Elemente erstellt und richtig angeordnet, wird es Zeit, sich über die Arbeitsweise des Programms Gedanken zu machen. Hierzu folgende Informationen:

  • Wie Sie bereits wissen, verwendet Metacard Karten. Durch diese Technik ist es extrem einfach, eine Adressverwaltung zu programmieren, da für jeden weiteren Datensatz nur eine weitere Karte erstellt werden muss, die genau dieselben grafischen Elemente wie die Anfangskarte aus Abbildung 1 erhält.
  • Um mit dem Pfeil-Button zum nächsten Datensatz zu gelangen, reicht ein einfacher Kartenwechsel aus.
  • Der Button "Neuer Eintrag" erstellt einfach eine Kopie der aktuellen Karte und fügt sie als letzte Karte im Stapel an. Anschließend löscht er alle Textfelder, da die Daten aus dem alten Datensatz mit kopiert wurden.
  • Der Button "Clear" sorgt ebenfalls dafür, dass alle Textfelder gelöscht werden. Um den Programmcode für das Löschen aller Textfelder nicht zweimal (Button "Neuer Eintrag" und Button "Clear") schreiben zu müssen, besteht die Möglichkeit, eine Prozedur zentral im Stapelprogramm zu erstellen.
  • Der Button "Suchen" erfragt zunächst Vor- und Nachnamen und geht anschließend mit Hilfe einer Schleife alle Karten durch und vergleicht die erfragten Werte mit den Werten in den entsprechenden Textfeldern. Nach diesen theoretischen Informationen fehlt jetzt eigentlich nur noch die Umsetzung in die Praxis. Wie Sie aus der oben stehenden Auflistung entnehmen können, wollen wir eine Prozedur zum Löschen aller Textfelder erstellen. Die Prozedur mit dem Namen "clear_form" soll zentral im Stack-Skript gespeichert werden. Listing 3 zeigt den entsprechenden Programmcode.

Listing 3

on clear_form
  put empty into cd fld "Vorname"
  put empty into cd fld "Nachname"
  put empty into cd fld "Straße"
  put empty into cd fld "PLZ"
  put empty into cd fld "Ort"
  put empty into cd fld "Telefon"
  put empty into cd fld "Fax"
  put empty into cd fld "E-Mail"
  put empty into cd fld "Bemerkung"
end clear_form

'empty' ist eine Metacard-Konstante. Die Konstante ist gleichbedeutend mit einen String, der keine Zeichen enthält (""). Ist die Funktion definiert, kann sie aus den entsprechenden Tastenprogrammen aufgerufen werden. Hierzu zunächst der Button "Clear".

Listing 4

on mouseUp
  clear_form
end mouseUp

Die ganze Funktion des Buttons "Clear" besteht aus einem einfachen Aufruf der Prozedur "clear_form". Der Button "Neuer Eintrag" legt mit Hilfe des Befehls 'clone' vorher noch eine Kopie der Karte an (Listing 5).

Listing 5

on mouseUp
  clone this card
  clear_form
end mouseUp

Jetzt bleiben noch die Tasten "Suchen" und die Pfeil-Taste, die zur nächsten Karte führt.

Die Pfeil-Taste besteht im Wesentlichen nur aus einem simplen Befehlsaufruf:

go to next card

Das Tastenprogramm "Suchen" ist hingegen etwas komplizierter und in Listing 6 abgedruckt:

Listing 6

on mouseUp
  ask "Nachname"
  put it into nachname
  ask "Vorname"
  put it into vorname
  repeat with i=1 to the number of cards of this stack
    go to card i
    if cd fld "Nachname" = nachname and cd fld "Vorname" = vorname then
      put i into x
      exit repeat
    end if
  end repeat
  go to card x
end mouseUp

Mit dem 'ask'-Befehl wird zunächst der Nachname und der Vorname erfragt, nach denen gesucht werden soll. Der zurückgelieferte Wert wird den Variablen 'vorname' bzw. 'nachname' zugewiesen. Die anschließende 'repeat'-Schleife besitzt eine Zählervariable (i) und geht alle Karten im Stapel durch. Mit einer 'if'- Anweisung wird überprüft, ob die Kartenfelder "Nachname" und "Vorname" mit den erfragten Werten übereinstimmen. Ist dies der Fall, wird die Ausführung der Schleife abgebrochen und zur Karte mit dem gefundenen Datensatz gewechselt.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Metacard - Programmieren ganz einfach, Teil 2
    Nachdem wir uns in der letzten Ausgabe mit der Installation von Metacard und der Bedienung der Oberfläche beschäftigt haben, geht es jetzt um die Programmierung in Metacard.
  • Metacard - Programmieren ganz einfach, Teil 1
    Wer von Ihnen hat sich beim Benutzen eines Programms nicht auch schon einmal gesagt: "Das könnte ich bestimmt besser machen." Haben Ihnen bisher vielleicht Programmierkenntnisse in C bzw. C++ gefehlt, gibt es jetzt eine Weg, der das Erstellen von Programmen mit grafischer Benutzeroberfläche zum Kinderspiel werden lässt. Die Lösung heißt Metacard.
Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...