Leerzeichen mit ProgramParameter()?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Leerzeichen mit ProgramParameter()?

Beitrag 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.
Zuletzt geändert von PureBasic4.0 am 16.05.2007 19:18, insgesamt 1-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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.
Zuletzt geändert von PureLust am 16.05.2007 18:44, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten