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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.