Startseite › Foren › Deutsches LiveCode-Forum › Zeilen nach oben schieben
Schlagwörter: Zeilen nach oben schieben
- Dieses Thema hat 17 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 7 Monaten von Oliver122.
-
AutorBeiträge
-
-
März 5, 2021 um 21:32 Uhr #26949
Hallo zusammen,
ich habe mal ein neues Problem. Meine Plattform ist Win.
Ich versuch das Problem mal zu beschreiben.
Mit einem Klick auf einen btn kann man eine Zeile aus mehreren Feldern genannt
grp („block“&s) erzeugen. Das kann man sic wie die Zeilen einer Excel Tabelle vorstellen. Diese kann man dann beschreiben. Das funktioniert auch perfekt.Wenn eine Zeile nicht mehr gebraucht wird, kann man sie löschen. Mein Problem ist folgendes:
Wenn eine Zeile gelöscht wird, sollen alle darunterliegenden aufrücken.
Dies funktioniert aber nur selten. Meistens rücken sie nicht auf oder werden wild an eine andere Stelle gesetzt.Mein aktueller Versuch:
if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then put the top of grp ("block"&s) into oben3 set the top of grp ("block"&s) to oben3 -25 end if
In oben2 steht der top Wert, der gelöschten Zeile.
Auch andere Varianten haben nicht funktioniert.Ich hoffe ihr könnt mit der Beschreibung etwas anfangen.
Danke im Voraus.Oliver
-
März 5, 2021 um 21:59 Uhr #26951
Dein kleines Skript ist natürlich völlig korrekt!
Daher kommt es auf den Rest des Skriptes an, sieht ja aus,
als würde Obiges in einem REPEAT Loop vorkommen.
Also bitte mal posten. -
März 5, 2021 um 23:42 Uhr #26952
Hallo Klaus,
hier das ges. Skript:
global s, oben2, posi, lnr, tSkript3, tZahl, zz, grplist, oben3 on openCard if the environment is "mobile" then put specialFolderPath("engine") into programmPfad else put the filename of this Stack into programmPfad set the itemDelimiter to "/" delete the last item of programmPfad end if if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar") else end if put programmPfad &"/splash.livecode" into tZieldatei start using stack tZieldatei end openCard on posisetzen if posi = empty then put empty into lnr put 0 into oben2 put 0 into s put empty into grplist put 0 into tZahl repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat sort lines of posi numeric //speichern posisetzen2 else posisetzen2 end if end posisetzen on posisetzen2 add 1 to s put line 1 of posi into oben2 delete line 1 of posi //speichern silberline end posisetzen2 // Spalten erstellen on silberline lock screen set the label of btn "Münzen2" to "New Line" create grp ("block"&s) in grp "GoSi" put the short name of grp ("block"&s) of grp "GoSi" & return after grplist create fld "Nr" in grp ("block"&s) of grp "GoSi" set the width of fld "Nr" of grp ("block"&s) to 30 set the height of fld "Nr" of grp ("block"&s) to 25 set the left of fld "Nr" of grp ("block"&s) to 53 set the locktext of fld "Nr" of grp ("block"&s) to true create fld "edelme" in grp ("block"&s) of grp "GoSi" set the width of fld "edelme" of grp ("block"&s) to 250 set the height of fld "edelme" of grp ("block"&s) to 25 set the left of fld "edelme" of grp ("block"&s) to 83 create fld "kafda" in grp ("block"&s) of grp "GoSi" set the width of fld "kafda" of grp ("block"&s) to 100 set the height of fld "kafda" of grp ("block"&s) to 25 set the left of fld "kafda" of grp ("block"&s) to 333 create fld "kafpr" in grp ("block"&s) of grp "GoSi" set the width of fld "kafpr" of grp ("block"&s) to 100 set the height of fld "kafpr" of grp ("block"&s) to 25 set the left of fld "kafpr" of grp ("block"&s) to 433 create fld "anz" in grp ("block"&s) of grp "GoSi" set the width of fld "anz" of grp ("block"&s) to 100 set the height of fld "anz" of grp ("block"&s) to 25 set the left of fld "anz" of grp ("block"&s) to 533 create fld "gew" in grp ("block"&s) of grp "GoSi" set the width of fld "gew" of grp ("block"&s) to 100 set the height of fld "gew" of grp ("block"&s) to 25 set the left of fld "gew" of grp ("block"&s) to 633 create fld "uz1" in grp ("block"&s) of grp "GoSi" set the width of fld "uz1" of grp ("block"&s) to 50 set the height of fld "uz1" of grp ("block"&s) to 25 set the left of fld "uz1" of grp ("block"&s) to 733 create btn "del1" in grp ("block"&s) of grp "GoSi" set the width of btn "del1" of grp ("block"&s) to 10 set the height of btn "del1" of grp ("block"&s) to 25 set the left of btn "del1" of grp ("block"&s) to 783 set the label of btn "del1" of grp ("block"&s) to "x" put "global zz, posi" & CR & "on mouseUp" & CR & "put the top of the owner of me & return after posi" & CR & "put the short name of the owner of me into zz" & CR & "del1" & CR & "end mouseUp" into tSkript3 set the script of btn "del1" of grp ("block"&s) to tSkript3 set the top of grp ("block"&s) of grp "GoSi" to oben2 add 1 to tZahl del2 unlock screen end silberline on del1 sort lines of posi numeric show grp "dele" end del1 on del3 // Höhen anpassen repeat tZahl if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then put the top of grp ("block"&s) into oben3 set the top of grp ("block"&s) to oben3 -25 end if end repeat put empty into posi repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat sort lines of posi numeric delete line 1 to tZahl of posi end del3 on del2 // nummerieren put empty into lnr if there is a grp ("block"&s) then repeat with g = 1 to tZahl put g & return after lnr end repeat sort lines of lnr numeric end if if there is a grp ("block"&s) then repeat for each line c in lnr put line c of lnr into fld "Nr" of grp ("block"&s) end repeat end if end del2
Wenn man auf den Löschen btn del1 drückt, wird von tZahl eins abgezogen.
Durch btn del1 wird die Zeile gelöscht und dann del3 und dann del2 ausgelöst. -
März 6, 2021 um 14:08 Uhr #26958
Hi Oliver,
habe heute nicht so viel Zeit, daher hier nur ein paar wichtige Sachen, den Loop schaue ich mir am Wochenende an. Bitte alle Kommentare lesen und verstehen! 🙂
on openCard # if the environment is "mobile" then ## Alles was wir unter "Copy files" in den Standalone Application Settings" unserer Runtime hinzugefügt haben, ## finden wir später in -> specialfolderpath("resources") ## Dieser Specialfolderpath funktioniert auch in der IDE # put specialFolderPath("engine") into programmPfad # else # put the filename of this Stack into programmPfad # set the itemDelimiter to "/" # delete the last item of programmPfad # end if ## ABER!!!! ## Wir haben keine Schreibrechte in der Runtime in specialfolderpath("resources")!!! put specialfolderpath("documents") into programmPfad ## Du kannst immer nur EINEN Ordner zur selben Zeit erstellen, ## daher muss das in zwei Schritten passieren! ## 1. put "/Speicherdatenhaus" after programmPfad if there is not a folder programmPfad then create folder programmPfad end if ## 2. put "/SVar" after programmPfad if there is not a folder programmPfad then create folder programmPfad end if # if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then # create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar") # ## Ohne einen ELSE Falls brauchen wir auch kein ELSE! # else # end if ## WICHTIG!!! ## Du musst er checken, ob es diese Datei dort schon gibt! ## Wenn nicht, musst Du sie von irgedwo (aus specialfolderpath("resources"), denke ich!?) zuerst dorthin kopieren! ## put programmPfad &"/splash.livecode" into tZieldatei ## start using stack tZieldatei end openCard
## Sowohl im IF als auch im ELSE Falls gibt es den selben Befehl, das ist Redundanz! :-) ## Daher machen wir es besser so: on posisetzen if posi = empty then put empty into lnr put 0 into oben2 put 0 into s put empty into grplist put 0 into tZahl repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat sort lines of posi numeric //speichern # posisetzen2 # else # posisetzen2 end if posisetzen2 end posisetzen
Gruß
Klaus
-
März 8, 2021 um 22:42 Uhr #27014
Hallo Klaus,
kannst du schon was über den Loop sagen?
Danke im Voraus
Oliver
-
März 9, 2021 um 11:05 Uhr #27016
Der Loop selber ist korrekt, aber ganz ohne Zusammenhang.
Ich suche nach dem Skript, was eine Deiner Gruppen löscht und die restlichen Gruppen „aufrücken“ lässt! -
März 9, 2021 um 11:19 Uhr #27019
Hallo Klaus,
ah ok das stelle ich nachher mit einigen Erläuterungen ein.
Danke
-
März 9, 2021 um 18:31 Uhr #27033
Hallo Klaus,
das Skript zum Löschen ist:
global oben2,zz, tZahl, grplist on mouseUp put the top of grp zz into oben2 delete grp zz subtract 1 from tZahl del3 del2 hide grp "dele" end mouseUp
Dies wird über
on del1 sort lines of posi numeric show grp "dele" end del1
aufgerufen. Beim Druck auf ok, wird dann die Zeile gelöscht.
Danke für deine Hilfe.
-
März 9, 2021 um 18:38 Uhr #27034
Wo wird zz mit einem Wert gefüllt?
Finde ich nicht in Deinen Skripten hier. -
März 10, 2021 um 01:08 Uhr #27041
Wenn der btn del1 erzeugt wird.
Dieser schreibt den Short name, der grp, bei Benutzung
in die Variable zz. -
März 10, 2021 um 13:03 Uhr #27054
Ich verstehe leider nicht, nach welchem Prinzip Du die Sache programmiert hast!?
Was enthält die Variable -> posi
Wozu:... repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat ...
Wie ist der Workflow, bitte in klaren Worten erklären und kannst Du bitte noch einmal alle Skripte posten mit:
#########################################
als Trenner für den Ort der Skripte. also sowas:## Stack script:
on openstack
…
#########################################
## Button 1
on mouseup
…
########################################Danke, sonst komme ich nämlich einfach nicht „rein“.
-
März 10, 2021 um 21:09 Uhr #27066
Hallo Klaus,
hier das ges. Skript:
Skript Card Sparen; Open Card
############################################################### Ich denke deine Erklärungen hierzu habe ich verstanden.
#### Dasganze wird aber noch angepasst. Das kommt später dranglobal s, oben2, posi, lnr, tSkript3, tZahl, zz, grplist, oben3 on openCard if the environment is "mobile" then put specialFolderPath("engine") into programmPfad else put the filename of this Stack into programmPfad set the itemDelimiter to "/" delete the last item of programmPfad end if if there is not a folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar" ) then create folder (specialFolderPath("documents")&"/Speicherdatenhaus/SVar") else end if put programmPfad &"/splash.livecode" into tZieldatei start using stack tZieldatei end openCard ###################################################################################### ## Positionieren erzeugt nur eine Variable posi, in welcher in jeder line der Wert für top steht. ## Wenn man den btn New Line ( Skript kommt noch) klickt und Silber, im Dropdown Menü wählt, wird ## eine Line aus mehreren Felder erzeugt. Das erste endhählt die LNr., die automatisch eingetragen ## werden soll und das letzte ist ein btn, der die grp "dele" öffnet. Ein fld, mit zwei btn, abbrechen und ## ok. Bein klick auf ok, wird die Zeile gelöscht und alle darunterliegenden sollten nachrücken. ## In den fld dazwischen können Eintragungen gemacht werden. on posisetzen if posi = empty then put empty into lnr put 0 into oben2 put 0 into s put empty into grplist put 0 into tZahl repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat sort lines of posi numeric //speichern end if posisetzen2 end posisetzen ############################################################################### ## Die erstellte grp heißt grp ("block"&s). Die Variable s wir immer um 1 erhöht, damit sie alle ## einen unterschiedlichen Namen haben. line 1 von posi, wird in oben2 kopiert und bildet den Wert für top. ## Damit die nächste line nicht an der gleichen Stelle ist, wird line 1 gelöscht, sodass die nächste ## line um 25 erhöht ist. Wenn eine line gelöscht wird, wird der top Wert an posi zurückgegeben und ## posi numerisch geordnet. Das funktioniert alles. Nur das Aufrücken nicht. ## // speichern ist nur Platzhalter und kommt noch. on posisetzen2 add 1 to s put line 1 of posi into oben2 delete line 1 of posi //speichern silberline end posisetzen2 // Spalten erstellen ########################################################################### ## Hier wird die line, inkl. Löschen btn (dele1) erzeugt. ## tZahl gibt an wie viele dieser lines existieren. Beim Löschen also auch subtract 1 ## del2 wird ausgelöst on silberline lock screen set the label of btn "Münzen2" to "New Line" create grp ("block"&s) in grp "GoSi" put the short name of grp ("block"&s) of grp "GoSi" & return after grplist create fld "Nr" in grp ("block"&s) of grp "GoSi" set the width of fld "Nr" of grp ("block"&s) to 30 set the height of fld "Nr" of grp ("block"&s) to 25 set the left of fld "Nr" of grp ("block"&s) to 53 set the locktext of fld "Nr" of grp ("block"&s) to true create fld "edelme" in grp ("block"&s) of grp "GoSi" set the width of fld "edelme" of grp ("block"&s) to 250 set the height of fld "edelme" of grp ("block"&s) to 25 set the left of fld "edelme" of grp ("block"&s) to 83 create fld "kafda" in grp ("block"&s) of grp "GoSi" set the width of fld "kafda" of grp ("block"&s) to 100 set the height of fld "kafda" of grp ("block"&s) to 25 set the left of fld "kafda" of grp ("block"&s) to 333 create fld "kafpr" in grp ("block"&s) of grp "GoSi" set the width of fld "kafpr" of grp ("block"&s) to 100 set the height of fld "kafpr" of grp ("block"&s) to 25 set the left of fld "kafpr" of grp ("block"&s) to 433 create fld "anz" in grp ("block"&s) of grp "GoSi" set the width of fld "anz" of grp ("block"&s) to 100 set the height of fld "anz" of grp ("block"&s) to 25 set the left of fld "anz" of grp ("block"&s) to 533 create fld "gew" in grp ("block"&s) of grp "GoSi" set the width of fld "gew" of grp ("block"&s) to 100 set the height of fld "gew" of grp ("block"&s) to 25 set the left of fld "gew" of grp ("block"&s) to 633 create fld "uz1" in grp ("block"&s) of grp "GoSi" set the width of fld "uz1" of grp ("block"&s) to 50 set the height of fld "uz1" of grp ("block"&s) to 25 set the left of fld "uz1" of grp ("block"&s) to 733 create btn "del1" in grp ("block"&s) of grp "GoSi" set the width of btn "del1" of grp ("block"&s) to 10 set the height of btn "del1" of grp ("block"&s) to 25 set the left of btn "del1" of grp ("block"&s) to 783 set the label of btn "del1" of grp ("block"&s) to "x" put "global zz, posi" & CR & "on mouseUp" & CR & "put the top of the owner of me & return after posi" & CR & "put the short name of the owner of me into zz" & CR & "del1" & CR & "end mouseUp" into tSkript3 set the script of btn "del1" of grp ("block"&s) to tSkript3 set the top of grp ("block"&s) of grp "GoSi" to oben2 add 1 to tZahl del2 unlock screen end silberline ################################################################################## ## del1 öfnet grp dele, wenn der btn "del1" benutzt wird um eine line zu löschen. on del1 sort lines of posi numeric show grp "dele" end del1 ############################################################################# ## Der top Wert, der gelöschten line, wird in oben2 kopiert und alle lines, welche einen ## höheren Topwert haben, sollen aufrücken. Die anderen liegen ja bereits drüber. ## posi wird neu erzeugt und soviele lines of posi gelöscht, wie es grp ("block"&s) gibt ## damit es wieder zusammen passt und eine mögliche neue grp genau unter der letzten erzeugt wird. on del3 // Höhen anpassen repeat tZahl if there is a grp ("block"&s) and the top of grp ("block"&s) > oben2 then put the top of grp ("block"&s) into oben3 set the top of grp ("block"&s) to oben3 -25 end if end repeat put empty into posi repeat with y = 1000000 down to 225 step - 25 put y & return after posi end repeat sort lines of posi numeric delete line 1 to tZahl of posi end del3 ################################################################################## ## del2 packt die laufende Nr. in das erste Feld, jeder line bzw. grp ("block"&s) on del2 // nummerieren put empty into lnr if there is a grp ("block"&s) then repeat with g = 1 to tZahl put g & return after lnr end repeat sort lines of lnr numeric end if if there is a grp ("block"&s) then repeat for each line c in lnr put line c of lnr into fld "Nr" of grp ("block"&s) end repeat end if end del2
##############################################################################
## Dies ist das Skript für den btn, mit welchen ich die lines block… erzeugen kann.
## Die Auswahl Silber ist das was ich gerade schreibe, Gold, was goldline auslöst
## kommt noch, ist aber ähnlich.global menue on menuPick put the label of btn "münzen2"into menue if menue = "Silber" then posisetzen else goldline end if end menuPick
#############################################################################
## Wenn der btn dele1 betätigt wird, öffnet sich die grp dele. Drückt man auf ok,
## wird das o.a. Skript ausgelöst und grp block…. gelöscht.
## zz wird gefüllt, wenn man auf dem btn dele1 drückt, druch den Skriptbefehl
## put the short name of the owner of me into zz. Wie gesagt das funktioniert auch.
## Nur rücken die lines grp block… nicht auf, jedenfalls nicht immer, nur selten.
## Drückt man auf Abbrechen wir natürlich nur hide grp „dele“ ausgelöst.
## Das steht im btn Abbrechen.global oben2,zz, tZahl, grplist on mouseUp put the top of grp zz into oben2 delete grp zz subtract 1 from tZahl del3 del2 hide grp "dele" end mouseUp
#############################################################
So das müsste eigentlich alles sein. Ich hoffe es ist vollständig und verständlich.
Danke schonmal vorab.
Gruß
Oliver
-
März 11, 2021 um 11:34 Uhr #27076
Eine Sache habe ich noch vergessen. Alle Skripte sind auf der Card, mit Ausnahme der in den beiden btn.
Das wird bei einem nächsten Programm sicher besser werden. Da wird mehr Skript im Stack sein. Ich Stack befindet sich z.Z. Nur die Speichergeschichte, welche für Card Sparen noch nicht existiert. -
März 11, 2021 um 13:22 Uhr #27077
Hallo,
wenn ich das richtig verstehe, baust Du so eine Art Tabellen-Kalkulation aus einzelnen Text-Feldern (eins pro Zelle)? So etwas habe ich mal angefangen, aber dann aufgegeben weil es schnell viel zu langsam wurde. (Sortieren & Löschen vor allem).
Ich benutze jetzt ein normales Feld mit „ListBehavior“ & „tabStopps“ (aber OHNE „Basic Table object“ – das ist immer noch verbugt). Damit verzichte ich zwar auf Ausrichten (links, mitte, rechts) innerhalb der Zellen, dafür ist das sehr schnell & problemlos.
DataGrid passt mir auch nicht, zu umständlich, unflexibel & auch zu träge (IMHO).Zu Deinem Problem – ein Rat:
Versuche, die Daten zu manipulieren, und dann die Darstellung zu erneuern, also:1.) Bau Dir ein Skript, das passend zu Deinen Daten die erforderlichen Felder erzeugt, und dann die Daten einsetzt. Dafür eignet sich sehr gut ein „setProp“ Handler in der Gruppe – wenn Du die „cData of this grp“ änderst, löschst Du alle Felder & erzeugst sie neu. Und schreibst die Daten aus cData ‚rein.
Dieses Skript optimierst Du auf Geschwindigkeit – keine „repeat with i“ mehr, nur „repeat for each“ usw. Mit „Lock/ unlock screen“ geht das recht flott.2.) Wenn jetzt eine Zeile gelöscht wird, löschst Du die in einer Variable (= Kopie von cData), und wirfst die geänderte cData einfach zurück in die Gruppe. Selbiges beim Sortieren. Rumms, wird die Darstellung angepasst 🙂
Am Anfang Deiner setProp („setProp cData theData“, wobei „theData“ = die neuen Daten) prüfst Du, ob theData „empty“ ist (dann löschst Du einfach alle Felder) oder ob „(the number of lines of theData) = (the number of lines of the cData of me)“ ist (dann hat sich die Länge nicht geändert, und Du überschreibst einfach die Zellinhalte).
Vergiss nicht:
– Erst „pass cData“ am Ende der setProp schreibt theData in die „cData of me“ (auch wenn Du schon vorher die Felder ausgefüllt hast)!
– behalte immer mindestens 1 Control (Linie, Rahmen, Hintergrund-Rect …) in der Gruppe – Gruppen ohne Inhalt können verschwinden, auch wenn sie ein Skript haben!Noch was:
Wo Deine Skripte sich befinden ist weitgehend egal. Ich würde das so machen:
a.) openStack/ preOpenStack: auf der ersten Card. Dann werden sie auch nur beim ersten Start dieses Stacks aufgerufen.
b.) openCard: davon habe ich oft 2 – im Stack & in der Card. Im Stack für das, was immer passiert (z.B. Datum anzeigen), und in der Card das, was für diese Card spezifisch ist (z.B. Laden der Daten). „pass openCard“ am Ende sorgt dafür, daß das Event weitergereicht wird & die 2te Instanz erreicht.
c.) Stack Skript: Alles, was auf mehreren Cards gebraucht wird. Und ggf. Stack-Initialisierung.
d.) Card Skript: Nur das, was spezifisch für diese Card ist.Ich hoffe, zur allgemeinen Verwirrung beizutragen gekonnt zu haben 😉
Viel Spaß! -
März 11, 2021 um 14:09 Uhr #27078
Hallo Axwald,
danke für deine Hilfe, aber ganz so soll es nicht sein.
Eine grp Block… besteht aus sieben Feldern und muss auch gelöscht werden. Das erste ist die laufende Nr und alle anderen Können manuell beschrieben werden, zB. Art der Wertanlage, Kaufdatum……
Wird eine Zeile bzw. Grp gelöscht, wurde diese Wertanlage verkauft.Grüße
Oliver
-
März 12, 2021 um 12:20 Uhr #27092
Hallo,
was ich meine ist das:
Deine _Daten_ sind eine Tabelle. Die _Darstellung_ ist ein Haufen von Feldern.Du hast sowieso eine Funktion, die die _Daten_ in die _Darstellung_ übersetzt – sonst könntest Du sie nicht sehen.
Statt nun, wenn Zeile 3 gelöscht wird, mit großem Aufwand die _Darstellung_ zu ändern (alle Felder in Zeile 3 löschen, alle Zeilen in Zeile 4 – 2.345 jeweils 1 nach oben schieben, evtl. laufende Nummern neu berechnen), kannst Du auch einfach sagen:
delete line 3 of myData drawFields myData
(wobei „drawFields“ der Handler wäre, der die _Darstellung_ erzeugt, und „myData“ – nun, die Daten)
Damit sparst Du Dir einen Haufen unnötiger & fehlerträchtiger Coderei.So würde ich es jedenfalls machen. Viel Spaß!
-
März 16, 2021 um 12:22 Uhr #27174
Hi Oliver,
ich habe leider keine Zeit, das alles nachzubauen.
Wenn Du magst, darfst Du mir Deinen Stack rüberschicken, dann schaue ich mal drüber.Gruß
Klaus
-
Mai 2, 2021 um 20:13 Uhr #28177
Hallo Klaus,
es hat etwas länger gedauert, weil ich mich länger damit nicht beschäftigt habe.
Manche der Befehle kannte ich nicht. Die hätten einiges erleichtert.
Jetzt funktioniert es sehr gut.Bin gerade dabei mich da einzuarbeiten, aber schonmal tausend Dank für deine Hilfe.
Du hast es echt super gemacht.Grüße Oliver
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.