Controlnummer (name) = NULL?

  • hallo,

    und zwar habe ich ein problem mit einem programm...dort gibt es viele controls, welche wenn sie verändert werden mit einem input, in eine ini datei gespeichert werden und auch wieder ausgelesen werden sollen. Das funktioniert ganz gut so lange jedes control eine andere nummer hat oder namen (also wenn man die variable von einem control zb ausgeben lässt, kommt ja eine nummer raus)...

    ABER: manche controls haben keine nummer bzw die nummer 0...bisauf die controls mit der nummer 0 haben alle anderen verschiedene wie sie es auch haben sollen, aber wieso haben manche die nummer 0? Ich habe bei ihnen nichts anders gemacht.

    Hier ein teil von meinem code ich hoffe er reicht:

    [autoit]

    GUIStartGroup()
    $checkbox_re01_a01_cb01 = GUICtrlCreateradio(" "&"49,6", 420, 130, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb01 , GUICtrlRead(-1,1)), "~", " "))
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    $checkbox_re01_a01_cb02 = GUICtrlCreateradio(" "&"12,4", 420, 150, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb02 , GUICtrlRead(-1,1)), "~", " "))
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    $checkbox_re01_a01_cb03 = GUICtrlCreateradio(" "&"36,8", 420, 170, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb03 , GUICtrlRead(-1,1)), "~", " "))
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    $checkbox_re01_a01_cb04 = GUICtrlCreateradio(" "&"18,6", 420, 190, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb04 , GUICtrlRead(-1,1)), "~", " "))
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    $checkbox_re01_a01_cb05 = GUICtrlCreateradio(" "&"22,4", 420, 210, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb05 , GUICtrlRead(-1,1)), "~", " "))
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    GUICtrlSetFont(-1, 8.5, 250, "", $font)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    if $msg = $button_ja_change Then
    $read_change = GUICtrlRead($input_change)
    GUICtrlSetData($maus_real, $read_change)
    $new_string = StringReplace($read_change, " ", "~")
    IniWrite(@ScriptDir & "\saves.ini", "Labels", $maus_real ,$new_string)
    GUISetState(@SW_hide, $gui_change)
    EndIf

    [/autoit]

    im oberen teil sind einige controls

    um unteren teil wird das aus dem input in die ini datei geschrieben unter der nummer es controls

    (wie gesagt, bei vielen geht es auch, aber bei manchen leider nicht :( )

    vielen dank für die hilfe


    edit: oder wäre eine andere möglichkeit evtl möglich es in eine ini datei zu speichern und wieder auslesen zu lassen für jedes control?


    ÜBRIGENS: komischerweise geht es aber wenn er die position speichern will obwohl es das gleiche ist..hier der code:

    [autoit]

    if $msg = $button_ja_change Then
    $read_change = GUICtrlRead($input_change)
    GUICtrlSetData($maus_real, $read_change)
    $new_string = StringReplace($read_change, " ", "~")
    IniWrite(@ScriptDir & "\saves.ini", "Labels", $maus_real ,$new_string)
    GUISetState(@SW_hide, $gui_change)
    EndIf


    If $msg = $button_coord Then
    GUICtrlSetPos($maus_real, guictrlread($input_x), guictrlread($input_y))
    IniWrite(@ScriptDir & "\saves.ini", "Pos", $maus_real & "_x" ,guictrlread($input_x, 1))
    IniWrite(@ScriptDir & "\saves.ini", "Pos", $maus_real & "_y" ,guictrlread($input_y, 1))
    endif

    [/autoit]

    Einmal editiert, zuletzt von Dtex (23. November 2012 um 11:26)

  • Okey oO Folgendes verstehe ich hier nicht:

    [autoit]

    $checkbox_re01_a01_cb01 = GUICtrlCreateradio(" "&"49,6", 420, 130, 100, 20)
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))

    [/autoit]

    Wieso verwendest du _WinAPI_GetDigCtrlID? Guictrlcreate... Gibt doch schon die ID des Controls zurück?
    (oder habe ich jetzt _WinAPI_GetDigCtrlID falsch verstanden?)


    Das dort oben ist das gleiche wie das hier?

    [autoit]

    $checkbox_re01_a01_cb01 = GUICtrlCreateradio(" "&"49,6", 420, 130, 100, 20)
    $LastCtrlID = $checkbox_re01_a01_cb01

    [/autoit]
  • Genau das wollte ich grad auf schreiben ... ich denke diese Zeilen mit

    [autoit]

    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))

    [/autoit]

    sind überflüssig.

    Und ich verstehe noch nicht ganz was du vor hast...du hast Radio Buttons, kannst du immer nur einen oder mehrere (falls das überhaupt mit Raiod möglich ist, dass weiss ich grad gar nicht :/) anklicken?
    Angenommen nur einen:
    Soll der der geklickt wird in eine .ini Datei geschrieben werden. Klickst du einen anderen an soll dieser Eintrag ersetzt, oder einfach unten drunter geschrieben werden?
    Angenommen mehr als einen:
    Die geklickten in eine .ini Datei schreiben. Klickst du andere an sollen diese Einträge ersetzt, oder einfach unten drunter geschrieben werden?

    Grüße Yaerox

    Grüne Hölle

  • Für mein ganzes programm ist die zeile nicht unsinn...aber egal....

    Ja also ich will jedes einzelne anklicken können, geht ja...und wenn ich es verändere, soll das in eine ini datei geschrieben werden. wenn ich ein anderen verändere, auch, aber unter einem anderen key natürlich....sogsehen soll jedes radio, wenn es umgeschrieben wird durch nen input, auch nen eigenen key haben und halt den wert, dem man es gegeben hat oder den string sodass ich jedes einzelne auch wieder abrufen kann wie man oben sieht...denn beim programm start, soll natürlich das gespeicherte wieder übernommen werden und nicht das alte dort stehen...


    mfg

  • Sorry, bring uns doch mal bitte ein möglich kurzes, lauffähiges Script, wo man deinen Fehler nachvollziehen kann.


    Zitat

    ABER: manche controls haben keine nummer bzw die nummer 0...bisauf die controls mit der nummer 0 haben alle anderen verschiedene wie sie es auch haben sollen, aber wieso haben manche die nummer 0? Ich habe bei ihnen nichts anders gemacht.

    Soviel ich jetzt verstanden habe, wird bei manchen keine ID zurück gegeben?


    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(3) : $font = ''Arial''' & @crlf) ;### Trace Console
    $font = 'Arial'
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(6) : $hGUI = GUICreate('''', 800, 800)' & @crlf) ;### Trace Console
    $hGUI = GUICreate('Seite 1', 800, 800)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(8) : GUIStartGroup()' & @crlf) ;### Trace Console
    GUIStartGroup()
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(10) : $checkbox_re01_a01_cb01 = GUICtrlCreateradio(" "&"49,6", 420, 130, 100, 20)' & @crlf) ;### Trace Console
    $checkbox_re01_a01_cb01 = GUICtrlCreateradio(" "&"49,6", 420, 130, 100, 20)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(12) : $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))' & @crlf) ;### Trace Console
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    ConsoleWrite('+> ID ' & $LastCtrlID & @CRLF & @CRLF)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(14) : GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb01 , GUICtrlRead(-1,1)), "~", " "))' & @crlf) ;### Trace Console
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb01 , GUICtrlRead(-1,1)), "~", " "))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(16) : $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)' & @crlf) ;### Trace Console
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    ;~ GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(19) : GUICtrlSetFont(-1, 8.5, 250, "", $font)' & @crlf) ;### Trace Console
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(21) : $checkbox_re01_a01_cb02 = GUICtrlCreateradio(" "&"12,4", 420, 150, 100, 20)' & @crlf) ;### Trace Console
    $checkbox_re01_a01_cb02 = GUICtrlCreateradio(" "&"12,4", 420, 150, 100, 20)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(23) : $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))' & @crlf) ;### Trace Console
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    ConsoleWrite('+> ID ' & $LastCtrlID & @CRLF & @CRLF)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(25) : GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb02 , GUICtrlRead(-1,1)), "~", " "))' & @crlf) ;### Trace Console
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb02 , GUICtrlRead(-1,1)), "~", " "))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(27) : $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)' & @crlf) ;### Trace Console
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    ;~ GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(30) : GUICtrlSetFont(-1, 8.5, 250, "", $font)' & @crlf) ;### Trace Console
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(32) : $checkbox_re01_a01_cb03 = GUICtrlCreateradio(" "&"36,8", 420, 170, 100, 20)' & @crlf) ;### Trace Console
    $checkbox_re01_a01_cb03 = GUICtrlCreateradio(" "&"36,8", 420, 170, 100, 20)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(34) : $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))' & @crlf) ;### Trace Console
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    ConsoleWrite('+> ID ' & $LastCtrlID & @CRLF & @CRLF)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(36) : GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb03 , GUICtrlRead(-1,1)), "~", " "))' & @crlf) ;### Trace Console
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb03 , GUICtrlRead(-1,1)), "~", " "))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(38) : $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)' & @crlf) ;### Trace Console
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    ;~ GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(41) : GUICtrlSetFont(-1, 8.5, 250, "", $font)' & @crlf) ;### Trace Console
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(43) : $checkbox_re01_a01_cb04 = GUICtrlCreateradio(" "&"18,6", 420, 190, 100, 20)' & @crlf) ;### Trace Console
    $checkbox_re01_a01_cb04 = GUICtrlCreateradio(" "&"18,6", 420, 190, 100, 20)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(45) : $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))' & @crlf) ;### Trace Console
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    ConsoleWrite('+> ID ' & $LastCtrlID & @CRLF & @CRLF)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(47) : GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb04 , GUICtrlRead(-1,1)), "~", " "))' & @crlf) ;### Trace Console
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb04 , GUICtrlRead(-1,1)), "~", " "))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(49) : $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)' & @crlf) ;### Trace Console
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    ;~ GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(52) : GUICtrlSetFont(-1, 8.5, 250, "", $font)' & @crlf) ;### Trace Console
    GUICtrlSetFont(-1, 8.5, 250, "", $font)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(54) : $checkbox_re01_a01_cb05 = GUICtrlCreateradio(" "&"22,4", 420, 210, 100, 20)' & @crlf) ;### Trace Console
    $checkbox_re01_a01_cb05 = GUICtrlCreateradio(" "&"22,4", 420, 210, 100, 20)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(56) : $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))' & @crlf) ;### Trace Console
    $LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))
    ConsoleWrite('+> ID ' & $LastCtrlID & @CRLF & @CRLF)
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(58) : GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb05 , GUICtrlRead(-1,1)), "~", " "))' & @crlf) ;### Trace Console
    GUICtrlSetData(-1, StringReplace(iniread(@ScriptDir & "\saves.ini", "Labels", $checkbox_re01_a01_cb05 , GUICtrlRead(-1,1)), "~", " "))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(60) : $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)' & @crlf) ;### Trace Console
    $lastctrlpos = ControlGetPos( "Seite 1", "" , $LastCtrlID)
    ;~ GUICtrlSetpos(-1, iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_x" , $lastctrlpos[0]), iniread(@ScriptDir & "\saves.ini", "Pos", $LastCtrlID & "_y" , $lastctrlpos[1]))
    ConsoleWrite('>Error code: ' & @error & @crlf & @crlf & '@@ Trace(63) : GUICtrlSetFont(-1, 8.5, 250, "", $font)' & @crlf) ;### Trace Console
    GUICtrlSetFont(-1, 8.5, 250, "", $font)

    [/autoit]


    Ich verstehe aus dem Oberen Post + dem Script nicht wirklich viel.

    Einmal editiert, zuletzt von Yjuq (23. November 2012 um 12:30)

    • Offizieller Beitrag

    Für mein ganzes programm ist die zeile nicht unsinn...aber egal....


    Nee, nicht egal. ;)
    Du machst es dir nämlich durch diese Konstruktion unnütz schwer. Beim Erstellen des Controls erhältst du als Return die ID und fängst sie ja auch in einer Variablen auf. Dann benutze doch diese Variable für deine Folgeoperation (IniRead...). Der Schritt "$LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))" ist wirklich ohne jeden Wert. Statt "$LastCtrlID" die Variable des zuletzt erstellten Controls verwenden führt zu exakt demselben Ergebnis.
    Btw.: Ein Control hat niemals die ID "0", das ist definitiv ausgeschlossen.

  • aber wie kann es sein, dass ich wie bei mir im 2ten script das ich im thread gepostet habe, bei "if $msg = $button_ja_change Then..." er anscheinend eine 0 zurück bekommt aber beim "If $msg = $button_coord Then..." eine zahl?

    Obwohl beide die selbe variable nutzen...Das verstehe ich nicht... eig sollte das doch dann kein problem sein für das programm...

  • Okay fehler behoben...anscheinend lag es daran, dass ich bei einem linksklick, dies, mit einer anderen funktion in der auch der linksklick vorhanden ist, überschnitten hat :)

    dennoch danke fürs überlegen...mfg