Aufruf zwei gleicher For-Schleifen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Espoleon
Beiträge: 3
Registriert: 13.12.2019 11:48

Aufruf zwei gleicher For-Schleifen

Beitrag von Espoleon »

Hallo,

da ich seit Tagen nicht auf die Lösung eines Rätsels komme, möchte ich es mal hier versuchen.

Ich rufe zwei For-Schleifen bei einem Linksklick, auf ein ImageGadget, auf. Das Resultat wird nur von der ersten For-Schleife angezeigt und ich weiß nicht wieso.

Vielleicht sieht jemand von euch die Lösung.

For-Schleifen:

Code: Alles auswählen

If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text"

  For DM_Content_Navi_Show.i = CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Main Switch ID") To (DM_Helper_List_Count_NaviMainEntries() * 58) Step 58

    If IsGadget(DM_Content_Navi_Show.i) <> 0
      HideGadget(DM_Content_Navi_Show.i, 1)
    EndIf

    If IsGadget(DM_Content_Navi_Show.i + 29) <> 0
      HideGadget(DM_Content_Navi_Show.i + 29, 0)
    EndIf

  Next

ElseIf DM_Settings_Navi_Mode.i = 1 And DM_Settings_Navi_ModeString.s = "Icons"

  For DM_Content_Navi_Show.i = CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Main Switch ID") To (DM_Helper_List_Count_NaviMainEntries() * 58) Step 58

    If IsGadget(DM_Content_Navi_Show.i) <> 0
      HideGadget(DM_Content_Navi_Show.i, 0)
    EndIf

    If IsGadget(DM_Content_Navi_Show.i + 29) <> 0
      HideGadget(DM_Content_Navi_Show.i + 29, 1)
    EndIf

  Next

EndIf



If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text"

  For DM_Content_Navi_Show.i = CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Games Switch ID") To (DM_Helper_List_Count_NaviGamesEntries() * 58) Step 58

    If IsGadget(DM_Content_Navi_Show.i) <> 0
      HideGadget(DM_Content_Navi_Show.i, 1)
    EndIf

    If IsGadget(DM_Content_Navi_Show.i + 29) <> 0
      HideGadget(DM_Content_Navi_Show.i + 29, 0)
    EndIf

  Next

ElseIf DM_Settings_Navi_Mode.i = 1 And DM_Settings_Navi_ModeString.s = "Icons"

  For DM_Content_Navi_Show.i = CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Games Switch ID") To (DM_Helper_List_Count_NaviGamesEntries() * 58) Step 58

    If IsGadget(DM_Content_Navi_Show.i) <> 0
      HideGadget(DM_Content_Navi_Show.i, 0)
    EndIf

    If IsGadget(DM_Content_Navi_Show.i + 29) <> 0
      HideGadget(DM_Content_Navi_Show.i + 29, 1)
    EndIf

  Next

EndIf
Der Code DM_Helper_List_Count_NaviGamesEntries() * 58, DM_Helper_List_Count_NaviGamesEntries() * 58 gibt die Anzahl der Einträge aus der Liste (List_Main()) zurück. Die * 58 beziehen sich auf 58 Elemente je Eintrag und da nur die Einträge gezählt werden sollen, werden mit * 58 die Elemente übersprungen. Zu jedem Eintrag gehört außerdem ein Icon-Eintrag, welcher ebenfalls die selben Elemente verwendet (sowohl der Eintrag als auch der Icon-Eintrag verwenden jeweils diese Elemente aber jeder Eintrag und jeder Icon-Eintrag kann seine eigenen Werte zu den Elementen haben). Daher * 58, um wirklich nur jeden einzelnen Eintrag zu zählen.

Zur Verdeutlichung:

Eintrag
Switch
Switch Icon
Summary
Summary Icon
...

List_Main
Eintrag ID
Eintrag X
Eintrag Y
Eintrag W
Eintrag H
Eintrag Text
Eintrag TextFont
Eintrag SubText
Eintrag SubTextFont
Eintrag IconID
Eintrag IconOverID
Eintrag IconOpacity
Eintrag IconOpacityOver
Eintrag ImageID
Eintrag ImageOverID
Eintrag Color Text
Eintrag Color TextOver
Eintrag Color SubText
Eintrag Color SubTextOver
Eintrag Color Background
Eintrag Color BackgroundOver
Eintrag Color EdgeTop
Eintrag Color EdgeRight
Eintrag Color EdgeBottom
Eintrag Color EdgeLeft
Eintrag Color EdgeTopOver
Eintrag Color EdgeRightOver
Eintrag Color EdgeBottomOver
Eintrag Color EdgeLeftOver

Ein Debug "Navi Games" direkt nach dem ersten For, in der zweiten Ausführung (also ab dem zweiten If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text") wird nicht angezeigt. Das sagt mir bisher nur das der Inhalt des zweiten Aufrufs nicht abgearbeitet / ausgeführt wird.
Nur, wieso?


Danke euch im voraus!
Windows 7 x64, PureBasic 5.70 x64
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Aufruf zwei gleicher For-Schleifen

Beitrag von ccode_new »

Espoleon hat geschrieben: Ein Debug "Navi Games" direkt nach dem ersten For, in der zweiten Ausführung (also ab dem zweiten If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text") wird nicht angezeigt.
Ein Debug direkt nach:
If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text"
wird aber ausgeführt, oder ?
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Espoleon
Beiträge: 3
Registriert: 13.12.2019 11:48

Re: Aufruf zwei gleicher For-Schleifen

Beitrag von Espoleon »

Ja, wird im oberen Teil (erste und zweite For-Schleife) ausgegeben.

Nachtrag:
Ja, wird auch im unteren Teil vor der ersten For-Schleife ausgegeben.
Windows 7 x64, PureBasic 5.70 x64
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Aufruf zwei gleicher For-Schleifen

Beitrag von ccode_new »

Was gibt den das hier zurück ?

Debug CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Games Switch ID")

Debug (DM_Helper_List_Count_NaviGamesEntries() * 58)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Espoleon
Beiträge: 3
Registriert: 13.12.2019 11:48

Re: Aufruf zwei gleicher For-Schleifen

Beitrag von Espoleon »

Setze ich das

Code: Alles auswählen

Debug CP::List_Func(5, 0, "", "", "", "", 0, "Digital Media", "Vars Cons Coords", "Navi Games Switch ID")
Debug (DM_Helper_List_Count_NaviGamesEntries() * 58)
direkt nach dem If DM_Settings_Navi_Mode.i = 0 And DM_Settings_Navi_ModeString.s = "Text" im unteren Teil, dann erhalte ich

Code: Alles auswählen

[13:17:15] [Debug] 567
[13:17:15] [Debug] 464
Die erste ID is korrekt, was man an folgendem Bild erkennen kann, die zweite ID ist hier nicht richtig und bringt mich vorerst wieder auf eine zu korrigierende Fehlerquelle.


Danke ccode_new

Bild
Windows 7 x64, PureBasic 5.70 x64
Antworten