Problem mit Checkbox

08/05/2011 21:51 butter123#1
Hallo Leute,

ich hab ein Programm geschrieben, dass die aktuelle IP alle x Minuten ausließt und in einer txt speichert.
Es soll auch im Hintergrund gestartet werden können, aber ich hab Probleme mit der Checkbox: sie verändert sich nicht, wenn man draufklickt...



08/05/2011 22:08 Ludder231#2
PHP Code:
 If GUICtrlRead($start)= $GUI_CHECKED Then
                FileWrite
($config"1")
            Else
                
FileWrite($config"0")
            EndIf 
08/05/2011 22:19 Freddy​#3
oder so
PHP Code:
$a GUICtrlRead($start)
If 
$a 1 Then
    FileWrite
($config"1")
Else
    
FileWrite($config"0")
EndIf 
08/05/2011 22:55 butter123#4
Das wars leider nicht :( ich kann die Box immer noch nicht anklicken...

Edit: Kommt das evtl. durch

PHP Code:
            If $file[3] = "1" Then             
                GUICtrlSetState
($start,$GUI_Checked)
            Else
                
GUICtrlSetState($start,$GUI_Unchecked)
            EndIf 
, dass die Box den Wert immer beibehalten will?
Aber wie bekomm ich es dann hin, dass sie den vorher gespeicherten Wert wieder hat?
08/05/2011 22:56 KDeluxe#5
Dein Lösungsweg lässt doch zu wünschen übrig. Die Lösung mit der 2. Dauerschleife und den vielen Sleeps die zudem noch enorm hoch ausfallen können ist schlichtweg zu schlecht. Ich finde das ganze Script schlecht, möchte jetzt aber nicht auf jede Kleinigkeit eingehen.

Ich habe mal eine bessere Lösung erstellt, diese kannst du ja nach deinen Wünschen ausbauen:
PHP Code:
#include <GUIConstantsEx.au3>
#include <INet.au3>

Global $Timer$bSaveIP True
GUICreate
("KD"10050)
$Button GUICtrlCreateButton("Start"0010025)
$Checkbox GUICtrlCreateCheckbox("Hintergrund"5259025)
GUICtrlSetState(-1IniRead("Settings.ini""Checkbox""State"$GUI_UNCHECKED))
If 
BitAND(GUICtrlRead($Checkbox), $GUI_UNCHECKEDThen
    $bSaveIP 
False
    GUISetState
()
EndIf

Do
    
$Msg GUIGetMsg()
    If 
$Msg == $Button Then
        $Timer 
0
        $bSaveIP 
Not $bSaveIP

        
If $bSaveIP Then
            GUICtrlSetData
($Button"Stopp")
        Else
            
GUICtrlSetData($Button"Start")
        EndIf
    ElseIf 
$Msg == $Checkbox Then
        $State 
GUICtrlRead($Checkbox)
        
IniWrite("Settings.ini""Checkbox""State"$State)
        If 
BitAND($State$GUI_CHECKEDThen GUISetState(@SW_HIDE)
    EndIf

    If 
$bSaveIP Then
        
If TimerDiff($Timer) >= 10 60 1000 Then ;10 Minuten
            FileWrite
("IPList.txt", @MDAY "." & @MON "." & @YEAR " " _
                                    
@HOUR ":" & @MIN ":" & @SEC "    IP Adresse: " _GetIP() & @CRLF)
            
$Timer TimerInit()
        EndIf
    EndIf

    
Sleep(50)
Until $Msg == $GUI_EVENT_CLOSE 

Zu deinem Fehler:
PHP Code:
If $file[3] = "1" Then
    GUICtrlSetState
($start,$GUI_Checked)
Else
    
GUICtrlSetState($start,$GUI_Unchecked)
EndIf 
Das hat ohne Abfrage NICHTS in der Schleife verloren.

Haja, bist ja schon selbst drauf gekommen.
08/05/2011 23:30 butter123#6
Deine Lösung ist in der Tat wesentlich eleganter ;)

Ich werd mich morgen mal weiter reinarbeiten, danke dir :)
08/06/2011 09:58 ~>Kredar<~#7
#Stop-Beiträge
______

Nach den Regeln dürfen wir nicht zu schreiben, dass wir ein Problem haben.

Diese Regel wurde erstellt von Adroxxx
[Only registered and activated users can see links. Click Here To Register...]




[Only registered and activated users can see links. Click Here To Register...]








Klicken [Only registered and activated users can see links. Click Here To Register...]
08/06/2011 14:21 omer36#8
Quote:
Originally Posted by ~>Kredar<~ View Post
#Stop-Beiträge
______

Nach den Regeln dürfen wir nicht zu schreiben, dass wir ein Problem haben.

Diese Regel wurde erstellt von Adroxxx
[Only registered and activated users can see links. Click Here To Register...]




[Only registered and activated users can see links. Click Here To Register...]








Klicken [Only registered and activated users can see links. Click Here To Register...]
Threadtitle sollen so gewählt werden, dass man erkennt um was für ein Problem es sich handelt. "Problem mit Checkbox" also sieht man, dass es sich um eine Checkbox handelt.

Was man bei deinem Threadtitle nicht sagen kann: [Only registered and activated users can see links. Click Here To Register...]

Lern lieber AutoIt, da du anscheinend mit deinem C&P nicht weit gekommen bist. Schaust du hier: [Only registered and activated users can see links. Click Here To Register...]
08/06/2011 14:32 butter123#9
Naja die Grundlagen aus den Tutorial gehen nicht sehr weit, damit kann man nicht sehr viel machen. Ich schreibe das Programm grad nochmal neu und versuche das von KillerDeluxe geschreibene einzubauen.
08/06/2011 15:31 KDeluxe#10
Wofür was neues erstellen? Ein Input hätte gereicht:
PHP Code:
#include <GUIConstantsEx.au3>
#include <INet.au3>

Global $Timer$bSaveIP True
GUICreate
("KD"11075)
$B_Start GUICtrlCreateButton("Start"0011025)
GUICtrlCreateLabel("Alle"5332017)
$I_Delay GUICtrlCreateInput("10"30303021)
GUICtrlCreateLabel("Minuten"65334017)
$C_Background GUICtrlCreateCheckbox("im Hintergrund"55010025)
GUICtrlSetState(-1IniRead("Settings.ini""Checkbox""State"$GUI_UNCHECKED))
If 
BitAND(GUICtrlRead($C_Background), $GUI_UNCHECKEDThen
    $bSaveIP 
False
    GUISetState
()
EndIf

Do
    
$Msg GUIGetMsg()
    If 
$Msg == $B_Start Then
        $Timer 
0
        $bSaveIP 
Not $bSaveIP

        
If $bSaveIP Then
            GUICtrlSetData
($B_Start"Stopp")
        Else
            
GUICtrlSetData($B_Start"Start")
        EndIf
    ElseIf 
$Msg == $C_Background Then
        $State 
GUICtrlRead($C_Background)
        
IniWrite("Settings.ini""Checkbox""State"$State)
        If 
BitAND($State$GUI_CHECKEDThen GUISetState(@SW_HIDE)
    EndIf

    If 
$bSaveIP Then
        
If TimerDiff($Timer) >= GUICtrlRead($I_Delay) * 60 1000 Then
            FileWrite
("IPList.txt", @MDAY "." & @MON "." & @YEAR " " _
                                    
@HOUR ":" & @MIN ":" & @SEC "    IP Adresse: " _GetIP() & @CRLF)
            
$Timer TimerInit()
        EndIf
    EndIf

    
Sleep(50)
Until $Msg == $GUI_EVENT_CLOSE 
08/06/2011 16:34 butter123#11
Soooo, bin fast fertig^^



Zwei Fragen:
Wieso verwendest du kein While 1 Switch Case... für die Buttons? So hab ich es in bisher jedem Beispiel gesehen.

Wieso Funktioniert das mit dem Traymenü nciht richtig? (es passiert nichts, wenn ich auf "Vordergrund" klicke) In der Hilfe ist es mit While 1 Select Case... gemacht, lässt sich das nicht einfach in deine Version einbauen?

lg und schonmal danke :P

keks
08/06/2011 17:37 KDeluxe#12
Natürlich, bei einem oder zwei Controls benutze ich aber meistens If-Abfragen und eine Do-Schleife. Prinzipiell ist das aber egal.
08/06/2011 19:11 butter123#13
So Programm ist fertig. Danke ncohmal für die Hilfe :)

Für alle die es wissen wollen: Ich habe
PHP Code:
    Select
        
Case $tMsg $tVordergrund                                                 ;traymenü

            $show 
Not $show
            
If $show True  Then
                GUISetState
(@SW_SHOW)
                
TrayItemSetState($tVordergrund,$TRAY_CHECKED)
            Else
                
GUISetState(@SW_HIDE)
                
TrayItemSetState($tVordergrund,$TRAY_UNCHECKED)
            EndIf

    
EndSelect 
in die Do Schleife eingefügt, und an entsprechenden Stellen die Variable... geändert.
Die Variable musste ich einfügen, da es mit TrayItemGetState() nicht 100% funktioniert hat.