Startseite › Foren › Deutsches LiveCode-Forum › Erste Variable einrichten
Schlagwörter: Variable; Message-Box
- Dieses Thema hat 10 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 2 Jahren, 11 Monaten von Klaus Major.
-
AutorBeiträge
-
-
Oktober 21, 2021 um 19:10 Uhr #38035
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 -
Oktober 21, 2021 um 19:26 Uhr #38037
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
-
Oktober 21, 2021 um 20:46 Uhr #38043
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. -
Oktober 21, 2021 um 21:33 Uhr #38044
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
-
Oktober 23, 2021 um 14:30 Uhr #38108
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
ManniPS: Konntest Du die eingesandte LiveCode-Übung von mir überprüfen?
-
Oktober 23, 2021 um 14:39 Uhr #38109
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
-
Oktober 23, 2021 um 17:34 Uhr #38122
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 -
Oktober 23, 2021 um 23:15 Uhr #38133
Ja, ist angekommen, geht klar, morgen. 🙂
-
Oktober 24, 2021 um 10:15 Uhr #38162
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,dreiwertCard
global einwert,zweiwert,dreiwertWichtig 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 -
Oktober 24, 2021 um 14:07 Uhr #38175
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ß! -
Oktober 24, 2021 um 17:04 Uhr #38181
Ich hoffe, zur allgemeinen Verwirrung beizutragen im Stand gewesen zu sein!
Definitiv, Axwald, definitiv! 😀
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.