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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.