Bei Klick eines Listeneintrags, visibel des gleichlaut. Namen des fld einer grp

Startseite Foren Deutsches LiveCode-Forum Bei Klick eines Listeneintrags, visibel des gleichlaut. Namen des fld einer grp

Ansicht von 13 Antwort-Themen
  • Autor
    Beiträge
    • #39963
      akrages
      Teilnehmer

        Guten Abend
        ich habe in einer Gruppe „PickHistory“ 3 Felder.
        Ein Scrolling Field fld „Das Jahr auswählen“
        ein fld „PH2021“ und
        ein fld „PH2022“
        Außerdem einen Button btn „Zur History“

        Was ich jetzt möchte ist folgendes:
        Nach mouseUp auf den btn „Zur History“ sollen zunächst die beiden Felder fld „PH2021“ und fld „PH2022“
        in das Field „Das Jahr auswählen“ eingelesen werden.

        Wenn ich jetzt zB. auf die Zeile PH2021 in dem Scrolling Field fld „Das Jahr auswählen“ klicke,
        soll Visible des fld „PH2021“ auf true gestzt werden und dasVisible aller anderen Felder in dieser
        Gruppe auf false.

        Das ganze soll sowohl in der IDE als auch unter mobile (Android) funktionieren.

        Ich bin für jede Hilfe sehr dankbar.

      • #39973
        Klaus Major
        Administrator

          Hi akrages,

          Nach mouseUp auf den btn „Zur History“ sollen zunächst die beiden Felder fld „PH2021“ und fld „PH2022“ in das Field „Das Jahr auswählen“ eingelesen werden.

          ...
          put fld "PH2021" & CR & fld "PH2022" into fld "Das Jahr auswählen"
          ...

          Wenn ich jetzt zB. auf die Zeile PH2021 in dem Scrolling Field fld „Das Jahr auswählen“ klicke, soll Visible des fld „PH2021“ auf true gestzt werden und dasVisible aller anderen Felder in dieser Gruppe auf false.

          Ich mache das immer so:
          Skript vom Listenfeld:

          on mouseup
            put the selectedtext of me into tFeld
            alle_unsichtbar_ausser tFeld
          end mouseup

          Das hier eventuell ins Kartenskript oder auch ins Listenfeld,
          je nachdem wie oft das benötigt wird:`

          command alle_unsichtbar_ausser tFeld
             lock screen
             ## erst mal alles verstecken, dank LOCK SCREEN geht das elendig schnell :-)
             repeat with i = 1 to the num of flds of grp "deine gruppe hier"
                hide fld i of me
             end repeat
             ## Nun das gewünschte Feld anzeigen:
             show fld tFeld
             unlock screen
          end alle_unsichtbar_ausser

          Das geht so auch prima bei selbstgemachten Radiobuttons o.ä…

          Gruß

          Klaus

        • #39977
          Klaus Major
          Administrator

            Eventuell meinstest Du anstatt:

            ...
            put fld "PH2021" & CR & fld "PH2022" into fld "Das Jahr auswählen"
            ...

            eher das hier:

            ...
            put "PH2021" & CR & "PH2022" into fld "Das Jahr auswählen"
            ...

            ?
            Sonst klappt mein Skript wahrscheinlich ja nicht so richtig. 🙂

          • #39979
            akrages
            Teilnehmer

              Danke erstmal für deine Hilfe.
              Ich habe jetzt eine Lösung gefunden, mit der ich erstmal zufrieden bin.
              Es klappt zumindest in der IDE soweit, dass ich das Feld per klick auf den Listeneintrag aufrufen und sichtbar machen kann.

              Was ich eigentlich möchte ist, dass wenn ein neues Jahr angebrochen ist, eine neue Liste in die Gruppe eingefügt wird.
              in etwa so was wie:
              Wenn im Feld „Datum“ 2021 +1 steht (jetzt steht da nähmlich 2021 drin), dann kopiere das Feld „PH2021,
              benenne es um in (Namen aus dem Feld Datum holen) also 2022 und ein PH davor schreiben.
              Danach dann das neue Feld ab der zweiten Zeile leeren.

              Und ab jetzt sollen alle neuen Daten nicht mehr in das Feld „PH2021“ geschrieben werden, sondern in
              das neue Feld „PH2022“.

              Und da ist das Problem. Wie stelle ich es an, dass:
              1. Das neue Jahr erst dann berücksichtigt wird, wenn es angebrochen ist und
              2. Das speichern in das neue und nicht mehr in das alte Feld. Es wird ja immo beim speichern immer
              nur auf das feld PH2021 verwiesen.
              Es kommen ja (so ist der Plan) jedes Jahr ein neues PH20.. Feld dazu.

              Also so etwas müsste sich doch mit dem König der Looping-Strukturen „Repeat“ bewerkstelligen lassen.
              Aber das bekomme ich alleine nicht hin.
              Kannst du mir da bitte etwas unter die Arme greifen? 😉

            • #40050
              Klaus Major
              Administrator

                1. Das neue Jahr erst dann berücksichtigt wird, wenn es angebrochen ist und

                Das sollte Dir das aktuelle Datum sagen können. 🙂

                2. Das speichern in das neue und nicht mehr in das alte Feld. Es wird ja immo beim speichern immer nur auf das feld PH2021 verwiesen.Es kommen ja (so ist der Plan) jedes Jahr ein neues PH20.. Feld dazu.

                Sorry, ich kenn Deine App und seine Wirkungsweise ja nicht, daher kann ich das so auf die Schnelle und aus der Ferne nicht beantworten.

              • #40104
                Torsten
                Teilnehmer

                  Hi Akrages,

                  1. Das neue Jahr erst dann berücksichtigt wird, wenn es angebrochen ist und

                  Wenn Deine App wohl nicht pausenlos an ist, sondern immer wieder gestartet wird, überprüfst Du beim Start, ob das aktuelle Jahr noch gültig ist.

                  on openstack
                  
                    put last word of the long date into tActualYear
                    if tActualYear <> the actualYear of this stack then
                       set the the actualYear of this stack to tActualYear
                       create field "PH" & tActualYear 
                       -- und danach das Feld positionieren, altes Feld umpositionieren/ausblenden etc.
                    end if
                  
                  end openstack

                  Und ab jetzt sollen alle neuen Daten nicht mehr in das Feld „PH2021“ geschrieben werden, sondern in das neue Feld „PH2022“.

                  Hier bietet sich eine Property des Stacks an, in der das aktuell zu beschreibende Feld angeben wird:

                  set the currentDateField of this stack to "PH" & the actualYear of this stack

                  und dann in dem Handler, der Daten in das Feld schreibt:

                  put "Meine Information" into field the currentDatefield of this stack

                  So würde ich es machen.

                  Happy scripting!
                  Torsten

                • #40110
                  Torsten
                  Teilnehmer

                    Habs eben auch mal getestet, funktioniert. Wenn in einem neuen Jahr gestartet wird, wird auch ein neues Feld erzeugt und dieses

                    Ich hatee allerdings einen kleinen Typo im openstack gemacht und habe jetzt das Setzen des aktuellen Feldes gleich nach der Erzeugung eingebaut. Hier der korrekte Code:

                    on openstack
                    
                      put last word of the long date into tActualYear
                      if tActualYear <> the actualYear of this stack then
                         set the actualYear of this stack to tActualYear
                         create field "PH" & tActualYear 
                         set the currentDateField of this stack to "PH" & the actualYear of this stack
                         -- und danach das Feld positionieren, altes Feld umpositionieren/ausblenden etc.
                      end if
                    
                    end openstack
                  • #40140
                    akrages
                    Teilnehmer

                      Hi.
                      Vielen Dank.
                      Sobadl ich Zeit habe, werde ich dein Script testen.
                      Es liest sich auf jedenfall schon mal schlüssig und logisch.
                      Vielen Dank dafür.
                      Ich melde mich sobald ich es getestet habe wieder.
                      LG

                    • #40245
                      akrages
                      Teilnehmer

                        Hallo.
                        Ich habe jetzt mal versucht dein Script für meine Zwecke anzupassen.
                        Leider nur mit halbem Erfolg.
                        Hier mein Script

                        on mouseUp pMouseButton
                           ##put last word of the long date into tActualYear
                           put 2022 into tActualYear ##Nur zum testen!
                           if there is a field ("PH" & (tActualYear -1)) of cd "History"\ ##Das alte Jahr
                                 and there is not a field ("PH" & tActualYear) of cd "History" then ## so wird das neue Jahr nur 1x erstellt! 
                              clone field ("PH" & (tActualYear -1)) of cd "History"
                              set the name of it to "PH" & tActualYear
                              set the currentDateField of this stack to "PH" & the actualYear of this stack
                              answer the currentDateField of this stack ##Hier erhalte ich nur ein PH
                              
                              ## Den Inhalt des neue Feldes "PH" & tActualYear außer der enthaltenen Überschrift löschen.
                              delete line 2 to -1 of field the currentDateField of this stack
                              ## erzeugt diese Fehlermeldung:
                              ## button "Neuesjahr Neue PH": execution error at line 12 (Chunk: no such object), char 36
                              
                              
                              put 100 into field the currentDatefield of this stack ##Keine Fehlermeldung
                              ##aber es wird wohl auch nichts geschrieben, denn currentDatefield PH gibt es ja nicht!
                           end if
                        end mouseUp

                        Das neue Feld „PH2022 wird erstellt aber der Rest im Schript erzeugt nur Fehlermeldungen (siehe die Kommentare im Script).
                        Ich verstehe nicht, warum ich bei der Frage: answer the currentDateField of this stack
                        Nur ein PH angezeigt bekomme.
                        Eigentlich müsste doch ein PH2022 angezeigt werden.

                      • #40248
                        akrages
                        Teilnehmer

                          Nach langem ausprobieren habe ich durch folgende Änderung einen weiteren Teilerfolg erzielt.

                                set the currentDateField of this stack to "PH" & tActualYear
                                answer the currentDateField of this stack ##zeigt jetzt PH2022

                          Aber ich kann weder den Inhalt des neuer Feldes „PH2022 löschen, noch etwas hineinschreiben. 🙁

                        • #40262
                          Torsten
                          Teilnehmer

                            Das liegt daran, dass in der Property „actualYear of this stack“ in deinem Fall noch keinen Wert zugewiesen bekommen hat 🙂

                            In meinem Script-Vorschlag wurde geprüft, ob das aktuelle Jahr und das gespeicherte identisch sind und dann die Property neu gesetzt.

                            Ich habe die Zeile in Dein Script eingefügt:

                            on mouseUp pMouseButton
                               
                               put 2022 into tActualYear
                               set the actualYear of this stack to tActualYear
                               
                               if there is a field ("PH" & (tActualYear -1)) of cd "History"\ 
                                     and there is not a field ("PH" & tActualYear) of cd "History" then 
                                  clone field ("PH" & (tActualYear -1)) of cd "History"
                                  set the name of it to "PH" & tActualYear
                                  set the currentDateField of this stack to "PH" & the actualYear of this stack
                                  answer the currentDateField of this stack 
                                  
                                  delete line 2 to -1 of field the currentDateField of this stack
                                  put 100 into field the currentDatefield of this stack 
                                  
                               end if
                               
                            end mouseUp
                          • #40279
                            akrages
                            Teilnehmer

                              Hallo Torsten.
                              Vielen Dank für deine Hilfe.
                              Ich habe jetzt folgendes herausgefunden.
                              Wenn ich mein Script mit der von dir ergänzten Zeile ind den Stack einfüge, funktioniert alles ganz so wie es soll. Hurra!

                              Problem:
                              Das Script soll aber in einer Karte innerhalb des Stack stehen und da funktioniert es nicht mehr.
                              Und lasse ich es im Stack, kann ich von der Karte aus nichts mehr in das currentDatefield of this stack hineinschreiben bzw. es überhaupt ansprechen. Ich bekomme dann fogende Fehlermeldung:

                              button „Button“: execution error at line 14 (Chunk: no such object), char 26

                              Es ist aber wichtig, dass von der Karte aus funktioniert.

                            • #40280
                              akrages
                              Teilnehmer

                                Und gerade ist mir noch etwas aufgefallen.
                                Das Script im Stack funktioniert nur dann, wenn ich die Karte „History aufgerufen habe.
                                Es funktioniert nicht, wenn ich die Anwendung (in der IDE) starte. Dann kommt besagte Fehlermeldung.

                              • #40323
                                Torsten
                                Teilnehmer

                                  Hi,

                                  das sieht ganz danach aus, dass es einer genauere Angabe des Objekt-Ortes bedarf.
                                  Schick mir mal Deinen Stack vorbei, dann schaue ich mir die Fehlermeldungen mal an: torsten.holmer@web.de

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