Seite 1 von 1

Leerzeichen mit ProgramParameter()?

Verfasst: 16.05.2007 17:22
von PureBasic4.0
Hi, Leute

Ich habe folgendes Problem mit CountGadgetItems():

Hier der Code:

Code: Alles auswählen

  a = 0
  Anzahl = CountGadgetItems(#Device)
  For a = 0 To Anzahl
    Text$ = GetGadgetItemText(#Device,a,0)
    Debug "Eintrag "+Str(a)+"; "+Text$
    If LCase(SavedDevice$) = LCase(Text$)
      SetGadgetState(#Device,a)
      SetGadgetState(#Verk_Netzwerkg,a)
      Break
    EndIf
  Next
Es wird folgendes in der Debug-Ausgabe angezeigt:

Bild

In der Liste #Device wird aber folgendes angezeigt:

Bild

Was mache ich falsch? Ist das vielleicht ein Bug?

Ich weiß, dass das ComboGadget #Device heißt! Ist kein eventueller Tippfehler.

Verfasst: 16.05.2007 17:53
von PureLust
2 Dinge:

1. Deine Schleife muss bis "Anzahl-1" laufen und nicht bis "Anzahl", da die Items-Nummern bereits bei 0 beginnen und die Schleife bei einer Anzahl von 3 also nur von 0-2 laufen muss.
2. Das "Break" dürfte Dein Problem sein, da es vermutlich zu früh die Schleife beendet.
[Nachtrag:] Mach zusätzlich nach dem bestehenden Debug mal ein Debug LCase(SavedDevice$)+" = "+LCase(Text$) rein, dann solltest Du sehen, warum er die Schleife beendet und sie nicht bis zuende ausführt.

Gruß, PL.

Verfasst: 16.05.2007 17:55
von Fluid Byte
1. Deine Schleife muss bis "Anzahl-1" laufen und nicht bis "Anzahl", da die Items-Nummern bereits bei 0 beginnen und die
Muss sie nicht. Macht nur Sinn um den Leerreintrag nicht anzuzeigen. Denn er bekommt nicht zu viel Items sondern zu wenig.

Wo kriegst du die Liste der Adapter her? Können wir mal den ganzen Code sehen?

Verfasst: 16.05.2007 19:17
von PureBasic4.0
ok. vergesst es. ich hab nur in dem 900 zeilen code den überblick verloren. ein paar zeilen darunter war noch so ein ding und das hat das prog irritiert.

Aber etwas habe ich noch: Wie kann ich im ProgramParameter() Leerzeichen übergeben ohne extra den Index verwenden zu müssen?

//Edit: Ich werde den Titel jetzt ändern
Fluid Byte hat geschrieben: Wo kriegst du die Liste der Adapter her? Können wir mal den ganzen Code sehen?
@Fluid Byte: Wenn mein Prog fertig ist, stelle ich den gesamten Sourcecode auf meine (nicht designte) HP. Hier ist der Code, mit dem man die Liste der Adapter bekommt:

Code: Alles auswählen

; Es wird WMI benutzt. Irgendwo hier im Board gibt es einen Thread, in dem man die WMI.pbi bekommt
    wmi_init()
    WMI_Call("SELECT * FROM Win32_NetworkAdapter", "NetConnectionID, Index, MACAddress")
    ResetList(wmidata())  
    While NextElement(wmidata())
      AddElement(ConfigNet())
      ConfigNet()\NetConnectID=wmidata()
      NextElement(wmidata())
      ConfigNet()\Index=wmidata()
      NextElement(wmidata())
      ConfigNet()\MACAddress=wmidata()
    Wend
    wmi_release("OK")
    ClearList(wmidata())
    ResetList(ConfigNet())
    wmi_init()
    WMI_Call("SELECT * FROM Win32_NetworkAdapterConfiguration", "IPAddress,Description,SettingID")
    ResetList(wmidata())
    NextElement(wmidata())
    While NextElement(ConfigNet())
      ConfigNet()\IPAdress=wmidata()
      NextElement(wmidata())
      ConfigNet()\Description=wmidata()
      NextElement(wmidata())
      ConfigNet()\SettingID=wmidata()
      NextElement(wmidata())
    Wend

   While NextElement(ConfigNet())
      If ConfigNet()\NetConnectID <> "n/a"
        AddElement(Devices())
        Devices()\Name = ConfigNet()\NetConnectID
        Devices()\Realname = ConfigNet()\Description
        Devices()\Handle = ConfigNet()\SettingID
        Devices()\Activity = ConfigNet()\MacAddress ; Ich weiß, dass diese Zeile unnötig ist. Wenn man aber ConfigNet()\MacAddress in einen IF-Block setzt, gibt es einen Fehler in der wmi.pbi (Invaild Memory Access)!
        Delay(10) ; Lassen wir der wmi.pbi ein bisschen Zeit...
        Devices()\MacAddr = ConfigNet()\MacAddress
        If Devices()\Activity = "n/a"
          Devices()\Activity = "Deaktiviert"
        Else
          Devices()\Activity = "Aktiviert"
        EndIf
        AddGadgetItem(#Device,deviceanzahl,Devices()\Realname) ; Das hier ist die Liste der Adapter
        AddGadgetItem(#Verk_Netzwerkg,deviceanzahl,Devices()\Realname)
        deviceanzahl + 1
      EndIf
    Wend
Dieser Code ist für euch jetzt wahrscheinlich "nicht sauber", aber ich habe gerade keine Zeit, alles irrelevante herauszulöschen.