Startseite › Foren › Deutsches LiveCode-Forum › Prüfen ob an einer Position ein Objekt ist
Schlagwörter: Prüfen ob an einer Position ein Objekt ist
- Dieses Thema hat 11 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 3 Monaten von Klaus Major.
-
AutorBeiträge
-
-
Juli 15, 2020 um 21:59 Uhr #21783
Hallo zusammen,
wie kann man prüfen ob an einer Position bereits ein Objekt, in meinem Fall eine grp ist?
Folgender Fall:
Wenn ich auf einen Knopf drücke, wird eine grp aus zwei btn erstellt.
diese ist an einer festgelegten Positon. Das funktioniert auch.
Wird der btn erneut gedrückt, soll eine identische grp darunter erstellt werden-
Das funktioniert auch indem der top Wert immer um eine bestimmte Summer erhöht wird.Das Problem:
Es würde immer bis ins unendliche nach unten gehen. Hat man beispielsweise fünf grp’s untereinander erstellt
und löscht die dritte, soll eine neue grp, bei bedarf an der freigewordenen Position erstellt werden
und nicht darunter. Da der Wert in der Variablen aber immer erhöht wird, funktioniert das nicht.Es müsste, wenn man auf den Erstellen Knopf drückt eine Prüfung ablaufen. Diese muss oben anfangen und
erst an einer freien Position eine grp erstellen. Dabei dürfen die Gruppen aber nicht aufeinander gelegt werden.Ich hoffe es ist einigermaßen verständlich erklärt.
Könnt ihr mir hier weiterhelfen?
-
Juli 16, 2020 um 00:04 Uhr #21787
Hi Oliver,
der Befehl, den Du suchst, heisst intersect https://livecode.fandom.com/de/wiki/Intersect
Du könntest Dir auch die Positionen der Gruppe als Keys in einem Array merken und den Value auf false setzen, wenn die Gruppe gelöscht wird.
Happy Coding
Torsten -
Juli 16, 2020 um 00:10 Uhr #21788
Hallo Torsten,
danke für die Info. Ich teste es morgen oder die Tage mal.
-
Juli 16, 2020 um 14:34 Uhr #21790
Hi Oliver,
1. mit INTERSECT wirst Du hier nicht weiterkommen, denn Deine Gruppen sollen sich ja eben nicht überlappen.
2. tu uns und Dir selber einen Gefallen und vergiss das mit dem Plural und dem Apostroph, der wird in keiner Sprache so gebildet. grp -> grps genau wie car -> cars, btn -> btns etc.
3. das mit dem Array ist eine gute Idee!
Spontane Idee:
Füll es mit Name, RECT und aktiv/gelöscht, wenn eine Gruppe erzeugt/gelöscht wird.
Eventuell den Namen der Gruppe als KEY nehmen.So kannst Du mit einem flotten REPEAT LOOP herausfinden, wo gerade Platz für eine neue Gruppe ist.
Wenn alle Einträge im Array zu STATUS = aktiv, musst Du „unten“ die neue Gruppe anfügen.
Ansonsten, dort wo der Loop zum ersten Mal auf -> gelöscht trifft.Bei Fragen dazu stehe ich gerne parat! 🙂
Gruß
Klaus
-
August 12, 2020 um 21:42 Uhr #22104
Hallo zusammen,
ich komme nicht weiter.
Dieser Teil funktioniert und erzeugt eine Variable die
on erstellen3 put 0 into x repeat with y = 10085 down to 140 step - 45 put y & "_" & "0" & return after Pos put y & "_" & "0" & return after fld "feld1" set the itemDelimiter to "_" sort the first number of fld "feld1" numeric sort the first number of Pos numeric end repeat end erstellen3
etwa so aussieht….
140_0
185_0
230_0
275_0
320_0
365_0
410_0
455_0
500_0
545_0
590_0
635_0
680_0
725_0
770_0
815_0
860_0
905_0
950_0
995_0
1040_0
1085_0
………Danach soll mit einem Click auf einen Button die Position der danach zu erstellenden grp festgelegt werden.
Das klappt nieIch habe es so versucht..
repeat for each line y in Pos set the itemDelimiter to "_" if the second item of y = 0 then put the first item of y into oben add 1 to the last item of y end if end repeat
und so
repeat with y = 1 to 222 set the itemDelimiter to "." if the last item of line y of Pos = 0 then put the first item of line y of Pos into oben add 1 to the last item of line y in Pos end if end repeat
Die 0 wird nie zur eins und meistens wird in die Variable „oben“ 140 gepackt und dann nicht
mehr verändert.Könnt ihr mir helfen?
-
August 13, 2020 um 10:01 Uhr #22109
Hallo Oliver,
oha, da ist ja Einiges im Argen!
1. Nicht alles auf einmal machen, das geht auf Kosten der Effektivität (= Geschwindigkeit)!
Zuerst Deine Liste erstellen in einer Variablen.
Zugriffszeit auf Variablen ist 1000 * schneller als auf Felder
Dann die Liste sortieren, aber mit der korrekten Syntax!
Mich wundert, daß LC das ohne Mecker geschluckt hat!?on erstellen3 ## Wozu x? put 0 into x repeat with y = 10085 down to 140 step - 45 put y & "_" & "0" & return after Pos end repeat ## Letztes RETURN entfernen oder Du endest mit einer leeren Zeile! delete char -1 of Pos ## JETZT erst sortieren und zwar richtig und nicht schon in jedem Loop! set itemdel to "_" sort lines of Pos numeric by item 1 of each ## Und jetzt ins Feld packen als letzten Schritt: put Pos into fld "feld1" end erstellen3
2. Der „Container“ (hier Pos), den wir mit REPEAT FOR EACH abarbeiten ist READ-ONLY!
Das bedeutet, nach Deinen Loop ist Pos UNVERÄNDERT!, egal was Du mit Y machst!
Deshalb müssen wir hier eine neue Variable erstellen mit den gewünschten Änderungen... ## EINMAL setzten reicht! set the itemDelimiter to "_" repeat for each line y in Pos if item 2 of y = 0 then ## First, second etc. ist tolles Englisch, aber mit Nummern sind wir schneller! put item 1 of y & "_1" & CR after Pos2 ## In Deinem Loop hast Du "...item 1 into oben..." gesetzt? ## Also immer wieder überschrieben, keine Ahnung, was Du damit bezweckst? put item 1 of y into oben end if end repeat ## Letztes RETURN entfernen! delete char -1 of Pos2 ## Oder was Du nun damit vorhast: ## put Pos2 into Pos ...
Gruß
Klaus
-
August 18, 2020 um 21:23 Uhr #22254
Hallo zusammen,
Endlich klappte es.
Hier mal das gesamte Skript. So wird auch verständlich wozu es dient
Eigentlich gar nicht so schwer.global x, y, oben, oben2, z, tSkript, Pos on erstellen if Pos = empty then put 0 into oben put 0 into x repeat with y = 10085 down to 140 step - 45 put y & return after Pos end repeat sort lines of Pos numeric erstellen2 else erstellen2 end if end erstellen on erstellen2 add 1 to x repeat with y = 1 to 1 put line y of Pos into oben delete line y of Pos end repeat herstellen end erstellen2 on herstellen lock screen create grp ("gruppe."&x) in grp "scrollArea" create btn "Art" in grp ("gruppe."&x) of grp "scrollArea" create btn "Löschen" in grp ("gruppe."&x) of grp "scrollArea" put "global z, Pos" & CR & "on mouseUp" & CR & "put the top of the owner of me & return after Pos" & CR & "sort Pos numeric" & CR & "put the short name of the owner of me into z" & CR & "loeschen" & CR & "end mouseUp" into tSkript set the script of btn "Löschen" of grp ("gruppe."&x) to tSkript set the width of btn "Art" of grp ("gruppe."&x) to 100 set the height of btn "Art" of grp ("gruppe."&x) to 40 set the left of btn "Art" of grp ("gruppe."&x) to 15 set the width of btn "Löschen" of grp ("gruppe."&x) to 100 set the height of btn "Löschen" of grp ("gruppe."&x) to 40 set the left of btn "Löschen" of grp ("gruppe."&x) to 121 set the left of grp ("gruppe."&x) to 15 set the top of grp ("gruppe."&x) to oben set the style of btn "Löschen" of grp ("gruppe."&x) to roundRect set the backgroundcolor of btn "Löschen" of grp ("gruppe."&x) to red set the style of btn "Art" of grp ("gruppe."&x) to roundRect set the backgroundcolor of btn "Art" of grp ("gruppe."&x) to green unlock screen end herstellen on loeschen show grp "weg" end loeschen
Der Knopf Art soll ein Fenster öffnen, wo man dann einen Kredit und die Abzahlung eintragen kann.
Das kommt jetzt noch.Der „oben“ Wert der bei jedem erstellen einer neuen Gruppe gelöscht wird, wird durch das Löschen der Groppe
wieder in die Variable geschrieben -
August 18, 2020 um 21:55 Uhr #22256
... repeat with y = 1 to 1 put line y of Pos into oben delete line y of Pos end repeat ...
Ernsthaft? 😀
-
August 18, 2020 um 22:27 Uhr #22258
Ja es soll ja immer die oberste line gelöscht werden. So klappt es.
Ist es denn nicht ok? -
August 19, 2020 um 10:26 Uhr #22268
Sicher ist das OK, aber extremer OVERKILL! 🙂
Wie wäre es stattdessen mit einem popeligen:
... put line 1 of Pos into oben delete line 1 of Pos ...
Macht das Selbe mit weniger Tipparbeit. 😎
-
August 19, 2020 um 15:39 Uhr #22286
Stimmt das würde wohl auch gehen. Was habe ich hier nicht alles ausprobiert und eigentlich ist es so einfach
-
August 19, 2020 um 17:34 Uhr #22288
Nicht immer so kompliziert denken! 🙂
Wie im richtigen Leben, da hätten wir die erste Zeile genommen und danach durchgestrichen oder ausradiert, OHNE uns über einen LOOP Gedanken zu machen.
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.