Erste Variable einrichten

Startseite Foren Deutsches LiveCode-Forum Erste Variable einrichten

Schlagwörter: 

Ansicht von 10 Antwort-Themen
  • Autor
    Beiträge
    • #38035
      Manni
      Teilnehmer

        Hallo Leute,

        ich möchte analog zur Seite 95 im Hauke-Fehr-Buch eine Variable anlegen.
        Mein Skript auf der card ist: put 12+18+3 into wert.(Handler list)
        Wie dann im Buch beschrieben möchte ich den Inhalt der Variable >wert< in der Message-Box
        auslesen.
        Es wird in der Message Box eingetragen: answer wert
        Ich erhalte eine Anzeige : wert – mit buttem ok.
        Es wird nicht der Zahlenwert (Summe=33) angezeigt der der Variablen zugeordnet ist.
        Auch wenn ich die Variable “wert” in einem Anzeigefenster (Ich schreibe im Carten-skript:
        put wert in fld “ausgabe”, bleibt das Anzeigefeld “ausgabe” leer.
        Der Rechenwert ist augenscheinlich nicht in der angelegten Variable >wert<.
        Was mache ich falsch?
        Für eine Hilfe dankbar manni

      • #38037
        Klaus Major
        Administrator

          Hi Manni,

          hm:

          ...
          put 12+18+3 into wert
          answer wert
          ...

          zeigt mir aber 33 im Dialog an!

          Eventuell ist die Variable aber in dem anderen Handler, der den Wert ausgeben soll, unbekannt.
          Dann müsstest Du sie GLOBAL oder LOKAL definieren.

          Bitte poste doch mal alle involvierten Handler, die etwas mit dieser Variablen wert machen.

          Gruß

          Klaus

        • #38043
          Manni
          Teilnehmer

            Hallo Klaus,
            es gibt keine weitere Handler. Das Projekt besteht nur aus diesem einzigen Vorgang.
            Auch andere Variable (Muster aus dem Fachbuch) sind nicht anzulegen.
            Ich habe Livecode bereits erneut installiert, -Keine Änderung-. Kann ich Dir das Projekt
            einmal zusenden?
            Was ich noch bemerken sollte, ich hatte vor 2 Tagen die Aufforderung Livecode upzudaten.
            Dieser Sache bin ich aber nicht nachgekommen. ZZ. gibt es ja eine Umstellung welche die
            kostenlosen Varianten von Livecode abschaffen soll.
            Ich verwende normalerweise die Ubuntuversion. Hier ist bereits eine Installation ohne spätere
            Bezahlschranke nicht mehr möglich. Mit dieser Livecode-politik verliert das Programm die opensource
            Lizenz. Sehr schade!
            Grüße Manni.

          • #38044
            Klaus Major
            Administrator

              Hi Manni,

              yo, schick mal rüber! 🙂

              Version 9.6.3 ist die letzte Version von LC, die es noch als Community (= kostenlose) Version gab.
              Jede höhere Version kostet leider…

              Gruß

              Klaus

            • #38108
              Manni
              Teilnehmer

                Hallo Klaus,

                ich komme noch einmal auf mein Variablen-Problem zurück.
                Ich habe meine Version Livecode 9.5 (Die Kostenfreie) auf ein komplettes neues
                Windows 10 installiert. –Es gibt keine Verbesserung.–

                Zahlenwerte sind nicht mit der Skriptanweisung:
                put >zB.-12+18+13< into >zB.-ersterWert< in die Variable einzutragen!
                Sie sind auch nicht mit der Message-Box auszulesen.
                Als weitere Fragen tauchen auf:

                1.)Wo kann ich die Variable anlegen?
                Ich gehe davon aus, dass es keine spezifische Orte für das Skript gibt, kann ich also wahlweise im Stack Editierbereich oder im Card Editierbereich anlegen?

                2.) Sind weitere Skriptanweisungen wie z.B
                on mouseUp
                >Skriptanweisung für Variable-Herstellung<
                end mouseUp
                unbedingt erforderlich?
                Wie im Buch (Hauke Fehr) beschrieben, sind Variable Kernfunktionen der Programmierung.
                Es ist also für mich zwingend, dass Problem auszuräumen, um überhaupt weitere Programmier-Aktionen durch zuführen.

                Ich danke sehr für Deine Mühe
                Manni

                PS: Konntest Du die eingesandte LiveCode-Übung von mir überprüfen?

              • #38109
                Klaus Major
                Administrator

                  Leider ist bisher nicht von Dir eingegangen?
                  Bitte noch einmal abschicken, danke.

                  1. Das kommt darauf an, wann und wo Du diese Variable benötigst.
                  2. Du kannst auch z.B. “on openstack” alle Deine benötigten Variablen deklarieren.
                  Und damit sie überall, d.h. in jedem Skript verfügbar sind, solltest Du sie über jedem Skript als GLOBAL definieren.

                  Beispiel Stackskript:

                  global einwert,zweiwert,dreiwert
                  
                  on openstack
                    put 1 into einwert
                    put 2 into zweiwert
                    put 4 into dreiwert ## :-)
                  end openstack

                  Dann, wenn Du später in z.B. einem MOUSEUP Handler auf diese Variablen zugreifen willst:

                  ## Zwingend erforderlich, wenn Du mit globalen Variablen arbeitest.
                  ## Die müssen dann in jedem Skript immer wieder angegeben werden.
                  ## Das mag in anderen Programmiersprachen anders sein, aber ISSO in LC :-)
                  global einwert
                  
                  on mouseup
                     answer einwert
                     ## -> 1
                     add 1 to einwert
                     answer einwert
                     ## -> 2
                  end mouseup

                  Gruß

                  Klaus

                • #38122
                  Manni
                  Teilnehmer

                    Danke für Deine Muster. Ich habe sie in einem neuen Stack umgesetzt.
                    Leider ohne Erfolg.
                    Das angelegte Projekt habe ich Dir erneut zugesandt.
                    Als Lösung schlage ich vor, Du verbessert ggf. das Projekt und sendest es mir zurück.
                    Ich lasse es dann auf meinem Rechner laufen. Wenn es läuft sind es sicher meine Programmfehler. Läuft Dein Programm nicht, sollte wohl mein installiertes Programm
                    schadhaft sein.
                    Geht das O.K.?
                    Grüße

                  • #38133
                    Klaus Major
                    Administrator

                      Ja, ist angekommen, geht klar, morgen. 🙂

                    • #38162
                      Manni
                      Teilnehmer

                        Hallo Klaus,
                        das Problem ist gelöst.

                        Die Lösung zusammengefasst (für alle Neu-Anwender):

                        Es ist wichtig anzulegende Variable zu deklarieren. Entweder auf dem Stack oder auf einer Card:
                        folgende Skripts Beispiele:
                        on openstack
                        put 1 into einwert
                        put 2 into zweiwert
                        put 4 into dreiwert
                        end openstack
                        oder
                        on opencard
                        put 1 into einwert
                        put 2 into zweiwert
                        put 4 into dreiwert
                        end opencard
                        Möchte man die Variable im gesamten Skript einsetzen, sind Sie als Global zu definieren.
                        Und in jedem Skript wieder anzugeben.
                        Beispiele:

                        Strack
                        global einwert,zweiwert,dreiwert

                        Card
                        global einwert,zweiwert,dreiwert

                        Wichtig ist, dass die Variablen in der Phase der Erstellung (Eingabe) nicht direkt aktiv sind.
                        Eine Inhalts- Anzeige über die Message-Box erfolgt noch nicht. (Das war mein entscheidender Denkfehler)
                        Erst nach dem Speichern und dem Neustart des Projekts sind die angelegten Variablen im Zugriff und können dann auch mit answer <Variable> in der Message-Box mit Inhalt angezeigt werden und können sonstweilig zum Einsatz kommen.

                        Ich hoffe, dass ich das Prozedere hier für alle Neueinsteiger richtig wieder gegeben habe.
                        Bedanke mich ausdrücklich bei Klaus Major, der mich zu diesen Erkenntnissen kommen lies.
                        Grüße Manni

                      • #38175
                        Axwald
                        Teilnehmer

                          Hallo,

                          scheinbar gibt es kleine Unklarheiten bzg. Variablen. Ich versuche das mal ganz kurz zu erklären:

                          In den Einstellungen: 2 Methoden!
                          Sowohl im Haupt-Menü als auch im Menü des Skript-Editors gibt es den Punkt “Edit/ Preferences”, der das Fenster für die Einstellungen öffnet. Dort, im Tab “Script Editor”, gibt es ein Kästchen für “Strict Compilation Mode”. Dieses legt fest, wie “Lokale Variablen” erzeugt werden:
                          – aus = “on-the fly”: einfaches Zuweisen eines Wertes genügt, um eine Variable zu erzeugen (“local X” geht aber auch), oder
                          – an = “explizit”: jede Variable MUSS vor Benutzung mittels “local X”initialisiert werden (die “klassische” Methode).

                          on test1  --  "on the fly":
                             put "1 - Heute ist" into myText  --  einfach Wert zuweisen
                             put the long system date into myDatum
                             put myText && myDatum  --  => Message box
                          end test1
                          
                          on test2  --  "explizit":
                             local myText, myZahl  --  zuerst deklarieren,
                             put "2 - Heute ist" into myText  --  dann Wert zuweisen!
                             put the long system date into myDatum
                             put myText && myDatum  --  => Message box
                          end test2

                          Wie gesagt, das gilt nur für “Lokale Variablen” – die anderen benutzen immer “explizit”! Um das wiederum zu verstehen, sollten wir die 3 Arten von Variablen klarstellen:

                          1.) Lokale Variablen:
                          Diese leben innerhalb eines Handlers – also zwischen “on X” (oder “command X”, oder “function X”) und “end X”, und haben auch nur hier Gültigkeit. Die beiden “myText” im obigen Beispiel sind also 2 verschiedene Variablen – und haben auch verschiedene Werte.

                          Lokale Variablen entstehen abhängig von der oben beschriebenen Einstellung:
                          – “on-the fly”: einfaches Zuweisen eines Wertes initialisiert & füllt sie, und
                          – “explizit”: “local X” initialisiert X, aber es hat noch keinen Wert.

                          2.) Skript-Lokale Variablen:
                          Diese leben innerhalb eines Skriptes – also z.B. im Skript eines Buttons, einer Card usw., und haben Gültigkeit innerhalb diesen ganzen Skriptes. Sie müssen immer mittels “local X” initialisiert werden, und zwar ausserhalb eines Handlers. Ein Card-Skript, analog zu obigem Beispiel:

                          local l_datum
                          
                          on openCard
                             put the long system date into l_Datum
                          end openCard
                          
                          on test1  --  "on the fly":
                             put "1 - Heute ist" into myText  --  einfach Wert zuweisen
                             put myText && l_Datum  --  => Message box
                          end test1
                          
                          on test2  --  "explizit":
                             local myText, myZahl  --  zuerst deklarieren,
                             put "2 - Heute ist" into myText  --  dann Wert zuweisen!
                             put myText && l_Datum  --  => Message box
                          end test2

                          Auch Skript-Lokale Variablen entstehen erst, wenn sie initialisiert werden – also wenn zum ersten Mal ein Handler in diesem Skript aufgerufen wird. Einen Wert erhalten Sie erst, wenn er zugewiesen wird (hier im “openCard”-Handler, also beim ersten Aktivieren dieser Card). Bis dahin sind sie leer – die “explizit”-Methode.
                          Aufgrund des unterschiedlichen Verhaltens empfiehlt es sich, Skript-Lokale Variablen gesondert zu benamsen.

                          3.) Globale Variablen:
                          Diese verhalten sich fast genau wie Skript-Lokale Variablen, nur der Gültigkeitsbereich ist die “Engine” – also das Programm selbst. Das ist die LiveCode-IDE, oder eine StandAlone. Und eingeschlossen sind alle Stacks, die darunter laufen!

                          Abweichungen zu Skript-Lokal:
                          Definiert werden sie nicht mit “local X”, sondern mittels “global X”.
                          Und damit sie für ein Skript sichtbar sind, müssen Sie in jedem dieser Skripte nochmal explizit definiert werden – evtl. schon vorhandene Werte in der Variable werden erst so verfügbar!

                          Ich hoffe, zur allgemeinen Verwirrung beizutragen im Stand gewesen zu sein!
                          Viel Spaß!

                        • #38181
                          Klaus Major
                          Administrator

                            Ich hoffe, zur allgemeinen Verwirrung beizutragen im Stand gewesen zu sein!

                            Definitiv, Axwald, definitiv! 😀

                        Ansicht von 10 Antwort-Themen
                        • Du musst angemeldet sein, um auf dieses Thema antworten zu können.