Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: ScreenItems indiziert durchlaufen

  1. #11
    Registriert seit
    15.07.2015
    Ort
    73650 Winterbach
    Beiträge
    20
    Danke
    0
    Erhielt 3 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich löse das so

    Code:
    ' Alle Dialog-Elemente (benannt "DisconWarnDialog_1_...") ausblenden
    For Each ScreenItem In HmiRuntime.Screens(strBildName).ScreenItems
        ObjName=ScreenItem.ObjectName
        If InStr(ObjName, "DisconWarnDialog_1_")=1 Then
            ScreenItem.Visible=False
        End If
    Next
    For Each durchläuft alle Elemente
    Ich bin nicht faul, ich bin im Energiesparmodus.

  2. #12
    Medium ist offline Benutzer
    Themenstarter
    Registriert seit
    09.01.2012
    Beiträge
    48
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @IckeSI: So ähnlich hatte ich es jetzt auch versucht. Das Clearen ist aber eine gute Idee, gleich eingebaut. So schaut meine Sub jetzt aus:
    Code:
    Sub OutputValue_OnPropertyChanged(Byval Item, Byval value)                        
        On Error Resume Next
        Dim obj
        Dim i
        Dim n
        For i = ScreenItems("TankMin").Text To ScreenItems("TankMax").Text
            If i < 10 Then
                n = "BLM00" & i
            Else
                If i < 100 Then
                    n = "BLM0" & i
                Else
                    n = "BLM" & i
                End If
            End If
            Set obj = ScreenItems(n)
            If Err.Number = 0 Then
                If i = SmartTags("SelectedLM").Value Then
                    obj.Text = "X"
                Else
                    obj.Text = " "
                End If
            Else
                Err.Clear
            End If
        Next
    End Sub
    Klappt jetzt genau wie ich mir es vorgestellt habe. Danke nochmals an euch!

    Edit: @S7_PN: Das hatte ich ganz am Anfang auch so, allerdings wird die For Each Schleife niemals betreten. Das wird damit zusammen hängen, dass ScreenItems.Count auch 0 ergibt. Ich vermute, dass sich das etwas seltsam verhält, weil ich es in einem Faceplate, nicht einem Bild mache.

    Edit2: Die Benamsung werde ich aber noch ändern, so dass ich mir die blöde Fallunterscheidung wegen der führenden Nullen sparen kann.
    Geändert von Medium (06.07.2016 um 14:19 Uhr)

  3. #13
    Registriert seit
    15.07.2015
    Ort
    73650 Winterbach
    Beiträge
    20
    Danke
    0
    Erhielt 3 Danke für 2 Beiträge

    Standard

    Hallo Medium,
    For Each ScreenItem In HmiRuntime.Screens(strBildName).ScreenItems

    durchläuft alle Elemente eines Bildes, ein "ScreenItems.Count" ist garnicht notwendig,

    ObjName=ScreenItem.ObjectName

    lädt dann den Namen des jeweiligen Objekt
    es, mann muss dann nur nur filtern ob die for each Schleife das objekt hat, welches man ändern will


    Code:
        For Each ScreenItem In HmiRuntime.Screens(strBildName).ScreenItems
            If ScreenItem.Type = "HMITextField" Then 
                ObjName=ScreenItem.ObjectName
                If Left(ObjName, COMMON_TB_NAME_LEN)=COMMON_TB_NAME_PART Then
                    ScreenItem.Text=""
                    ScreenItem.BackColor=ColorOfBg
                End If
                If InStr(1, ObjName, "tb_Diag_PnMeld_") Then
                    ScreenItem.Visible=False
                ElseIf ((InStr(1, ObjName, "tb_Diag_LastErr_")) Or (InStr(1, ObjName, "tb_Diag_ErrCnt_"))) Then
                    ScreenItem.Visible=True
                End If
            End If
        Next

    Mit ScreenItem.Type = "HMITextField" kann man auch gezielt z.B. nur nach Text-Feldern filtern
    Ich bin nicht faul, ich bin im Energiesparmodus.

  4. #14
    Medium ist offline Benutzer
    Themenstarter
    Registriert seit
    09.01.2012
    Beiträge
    48
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Schon klar, dass man .Count für eine ForEach Schleife nicht braucht. Aber probiere es mal aus: Versuche damit mal in einem Faceplate-Typen über alle Bildelemente zu iterieren. Ich wette, dass die Schleife nichtmals betreten wird.

  5. #15
    Registriert seit
    16.04.2014
    Ort
    Hamburg
    Beiträge
    43
    Danke
    2
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi,

    TIA v13:

    außerhalb Faceplate (Bildbaustein)
    Code:
    For Each ScreenItem In HmiRuntime.ActiveScreen.ScreenItems
            SmartTags("HMI_ItemCount") = SmartTags("HMI_ItemCount") + 1
    Next
    innerhalb Faceplate (Bildbaustein)
    Code:
    For Each ScreenItem In Me.HmiRuntime.ActiveScreen.ScreenItems
            SmartTags("HMI_ItemCount") = SmartTags("HMI_ItemCount") + 1     
    Next
    ggf. Hilft es

    Gruß Thomas

Ähnliche Themen

  1. TIA Datenbaustein mittels Schleife durchlaufen
    Von fabianfischer im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 16.07.2015, 08:44
  2. Adressen durchlaufen
    Von djp im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 02.09.2011, 11:36
  3. Auf Array indiziert zugreifen
    Von leon79 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 17.10.2008, 16:16
  4. Prioritätsfehler (OB85 wurde durchlaufen)
    Von Beren im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 18.07.2008, 16:03
  5. Schrittkette mehrmals durchlaufen lassen
    Von anfänger2006 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 15.04.2006, 08:51

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •