Wie wärs mit
[autoit]Blockinput()
[/autoit]
Und warum willst du den Bildschirm überhaupt einfrieren?
Arbeitest du mit Send() Mouseclick() etc?
Wie wärs mit
[autoit]Blockinput()
[/autoit]
Und warum willst du den Bildschirm überhaupt einfrieren?
Arbeitest du mit Send() Mouseclick() etc?
So wie du es hast wird immer noch ständig logik() und UpdateTextControl() ausgeführt.
Nur auf Events reagieren würde ungefähr so gehen
#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1) ; OnEvent-Funktionen werden nur aufgerufen, wenn die Option GUIOnEventMode auf 1 gesetzt ist
Opt("GUICoordMode", 1) ; 1 = absolute Koordinaten (Standard) relativ zur Dialog Box.
geschaeftsfaehigkeit()
[/autoit] [autoit][/autoit] [autoit]Func geschaeftsfaehigkeit()
Global $nMsg, $newtext
Global $radio1a, $radio1b, $radio1c, $radio2a, $radio2b, $radio2c ; Radio-Buttons
Global $label1 ; Textfeld mit Ergebnis
Local $r1a, $r1b, $r1c, $r2a, $r2b ; Handles der Radiobuttons
Global $beendenbutton ; Handle des Beenden-Buttons
GUICreate("Geschäftsfähigkeit ermitteln", 560, 240, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX)) ;
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateGroup("Alter eingrenzen", 5, 5, 140, 100)
$radio1a = GUICtrlCreateRadio("< 7 Jahre", 10, 30, 120, 20)
GUICtrlSetOnEvent($radio1a, "logik")
$radio1b = GUICtrlCreateRadio(">= 7 UND < 18 Jahre", 10, 50, 120, 20)
GUICtrlSetOnEvent($radio1b, "logik")
$radio1c = GUICtrlCreateRadio(">= 18 Jahre", 10, 70, 120, 20)
GUICtrlSetOnEvent($radio1c, "logik")
GUICtrlSetState($radio1b, $GUI_CHECKED) ; Checkbox aktivieren
GUICtrlCreateGroup("Art der Geistestätigkeit", 5, 110, 545, 80)
$radio2a = GUICtrlCreateRadio("nicht nur vorübergehende krankhafte Störung der Geistestätigkeit, die die freie Willensbestimmung ausschließt", 10, 135, 535, 20)
GUICtrlSetOnEvent($radio2a, "logik")
$radio2b = GUICtrlCreateRadio("keine Störung der Geistestätigkeit", 10, 155, 535, 20)
GUICtrlSetOnEvent($radio2b, "logik")
GUICtrlSetState($radio2b, $GUI_CHECKED) ; Checkbox aktivieren
$beendenbutton = GUICtrlCreateButton("&Beenden", 495, 200) ; Beenden-Button
GUICtrlSetOnEvent($beendenbutton, "_exit") ; Beenden des Programms über den Beenden-Button
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit") ; Beenden des Programms über das Kreuz oben rechts
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "_exit") ; Damit man das Progamm auch mit ESC sofort beenden kann
[/autoit] [autoit][/autoit] [autoit]$label1 = GUICtrlCreateLabel($newtext, 10, 200, 145, 40) ; Das Textfeld, in dem das Ergebnis angezeigt wird
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW) ; Anzeige der Dialogbox mit allen GUICtrlCreate ...
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
EndFunc ;==>geschaeftsfaehigkeit
Func _exit() ; Für das Beenden des Programms
Exit 0
EndFunc ;==>_exit
Func logik() ; hier liegt die juristische Logik des Problems
[/autoit] [autoit][/autoit] [autoit]$r1a = GUICtrlRead($radio1a) ; < 7
$r1b = GUICtrlRead($radio1b) ; >=7 < 18
$r1c = GUICtrlRead($radio1c) ; >= 18
$r2a = GUICtrlRead($radio2a) ; krankhafte Störung der Geistestätigkeit
$r2b = GUICtrlRead($radio2b) ; keine krankhafte Störung der Geistestätigkeit
;If (($r1a = 1 Or $r1b = 1 Or $r1c = 1) And $r2a = 1) Or ($r1a = 1) Then ; kompliziertere Lösung ...
If $r1a = 1 Or $r2a = 1 Then ; einfachere Lösung
$newtext = "geschäftsunfähig"
ElseIf $r1b = 1 And $r2b = 1 Then
$newtext = "beschränkt geschäftsfähig"
ElseIf $r1c = 1 And $r2b = 1 Then
$newtext = "geschäftsfähig"
EndIf
If GUICtrlRead($label1) <> $newtext Then
GUICtrlSetData($label1, $newtext)
EndIf
EndFunc ;==>logik
Ich hab es gestern so zusammengebaut wie du beschrieben hattest.
Hier die Guigetmsg für dein Script
Switch GUIGetMsg()
Case $GUI_EVENT_PRIMARYDOWN
$aEditGameCoursorInfo = GUIGetCursorInfo($pi_hGUI)
ConsoleWrite($aEditGameCoursorInfo[0] & @CRLF & $aEditGameCoursorInfo[1] & @CRLF)
Local $iLinieNummer = ''
Local $iKaestchenNummer = ''
; Kästchen ermitteln:
$x = Floor($aEditGameCoursorInfo[0]/40)
$y = Floor($aEditGameCoursorInfo[1]/40)
If $x >= 0 And $x < 10 And $y >= 0 And $y < 10 Then $iKaestchenNummer = 10 * $y + $x + 1
ConsoleWrite('Kastchen: ' & $iKaestchenNummer & @LF)
; Linie ermitteln:
$iToleranz = 5
For $i = 0 To 400 Step 40
; horizonal prüfen:
If $aEditGameCoursorInfo[1] > $i - $iToleranz And $aEditGameCoursorInfo[1] < $i + $iToleranz Then
; Oben oder unten
If Mod($aEditGameCoursorInfo[1], 40) < 20 Then
$iLinieNummer = 0
Else
$iLinieNummer = 2
EndIf
EndIf
; vertikal prüfen:
If $aEditGameCoursorInfo[0] > $i - $iToleranz And $aEditGameCoursorInfo[0] < $i + $iToleranz Then
; links oder rechts
If Mod($aEditGameCoursorInfo[0], 40) < 20 Then
$iLinieNummer = 3
Else
$iLinieNummer = 1
EndIf
EndIf
Next
ConsoleWrite('LinienNr: ' & $iLinieNummer & @LF)
EndSwitch
Allerdings würde ich mir das mit der Nummerierung nochmal überlegen. Das geht schöner...
Wenn du mein Scriptteil und Oscars script zusammenbaust bekommst du da schon was ganz schönes
1. Wegen GUICtrlSetPos() und weil du ständig neue Labels erstellst (du legst ständig neue Labels über die alten )
2. Weil du soviele andere Dinge machst und die nicht dann auf die Events reagierst wenn sie ausgelöst werden
3. siehe 2
4. Weil du es mit den Koordinaten -1, -1 erstellst
Woher hast du dir denn die ganzen Scriptfetzen zusammenkopiert?
Verstehst du was du alles machst?
Du solltest die ganze While 1 Schleife mal so umbauen dass darin nur auf Events reagiert wird. D.h. in der While sollte nur dein Switch $nMsg stehen den du in die beenden Funktion gepackt hast.
All die anderen Dinge musst du nur ausführen wenn ein Radiobutton gedrückt wird
Hab das ganze mal durchgespielt und es ist nicht so schwer wie du denkst
Welches Kästchen geklickt wurde geht recht einfach wenn du Floor() verwendest und damit die x bzw. y koordinate durch 40 (deine Spaltenbreite) teilst.
Zum erkennen welche Linie geklickt wurde kannst du auch ganz einfach eine For Schleife mit Step 40 verwenden.
Darin eine If Abfrage einbauen die prüft ob in der Nähe einer Linie geklickt wurde.
Ich hab das ganze auch schon fertig, aber ich wollte dich erst einmal selbst probieren lassen.
Wenn du meine Lösung sehen willst dann sags einfach
PS: Bitte beim nächsten mal ein lauffähiges Script posten
Bitte dann auch das Thema auf abgeschlossen setzen
(Ersten Post bearbeiten und Präfix abgeschlossen auswählen)
Herzlich Willkommen und viel Spaß hier im Forum
Wenn du die RecFileListToArray.au3 in dein Autoit Include Verzeichnis speicherst und es so ausführst geht es doch ganz gut
[autoit]
#include <RecFileListToArray.au3>
#include <Array.au3>; Wird nur für die _Arraydisplay gebraucht
$sPath = @scriptdir; oder wo du halt willst
$aArray = _RecFileListToArray($sPath, "*.avi", 1, 1, 0, 2)
_ArrayDisplay($aArray)
Problem ist dass du so zwei Strings vergleichst.
Wenn du Zahlen hast dann gehts auch
$i1=136
$i2=15
if $i1 > $i2 Then
msgbox(0,"","Treffer")
EndIf
Das müsste mit der dbghelp.dll gehen.
Ich würde mich mal im MSDN umsehen.
Evtl das hier?
Wieso willst du +{Tab} an das control senden?
Schick doch {SPACE}
Checkbox hab ich jetzt anders geregelt (über Switch/Case in der While)
Genau das hab ich ja gesagt^^
Statusleiste habe ich nun mit Leerzeichen aufgefüllt
Und genau das hab ich auch gemacht
StringRegExpReplace($string, '\*+', '*')
[/autoit]Tips werden nur angezeigt wenn der Text nicht in die Box passt.
Workaround:
_GUICtrlStatusBar_SetText($hStatus,'test' & StringFormat('%80s', ' '),0)
_GUICtrlStatusBar_SetText($hStatus,'--Versions-Nr.-- ',1)
Das flackern kommt davon dass du ständig den Guictrlsetstate und Guictrlsetdata ausführst. Das solltest du nur tun wenn auf die Checkbox geklickt wird
du hast
[autoit]$wv=_GUICtrlListView_GetItemChecked("$ContHandle", 1)
[/autoit]
statt
$wv=_GUICtrlListView_GetItemChecked($ContHandle, 1)
[/autoit]
gepostet
Dass du das Handle übergeben musst ist dir klar oder? Du übergibst da nen String "$ContHandle"
[autoit]$wv=_GUICtrlListView_GetItemChecked($ContHandle, 1)
[/autoit]Falls ja könntest du uns vllt einen Link zur Installationsdatei geben.
Wird wohl schwer das zu lösen wenn man nur ins Blaue rät
Die Frage ist wofür braucht mans^^
Du könntest es mit ner Funktion machen die ein Array zurückgibt
Also so in der art:
Test(Stringsplit(...))
Also ich weiß ja nicht wie es bei euch ist, aber aus Guictrlread bekomm ich nicht den Enabled/Disabled Status raus und aus Guictrlgetstate bekomm ich nicht den Checked/Unchecked Status.
Bei mir gehts so:
If BitAND($GUI_CHECKED, GUICtrlRead($bCheckbox08)) And BitAND($GUI_ENABLE, GUICtrlGetState($bCheckbox08)) Then
[/autoit]Probiers doch bitte mal so und sag uns was in die Console geschrieben wird:
#include <File.au3>
#include <Array.au3>
Local $aTracks
Local $aArray[1][2]
Local $aArray_BU
Local $aArray2[1][2]
Local $aIndexes
Local $sTracklist
Local $hFile
Local $aSplit
$sTracklist = FileOpenDialog("Select Tracklist...", @ScriptDir, "Tracklist (*.txt)")
_FileReadToArray($sTracklist, $aTracks)
For $i = 1 To UBound($aTracks) - 1
$aSplit = StringSplit($aTracks[$i], ";")
;If Ubound($aSplit) <> 3 then continueloop ; kurze variante
If Ubound($aSplit) <> 3 then ; lange variante für debugging
ConsoleWrite('Fehler bei Zeile ' & $i & ' mit dem Text: ' & $aTracks[$i] & @LF)
ContinueLoop
EndIf
If $i = 1 Then
$aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
$aArray[$i - 1][1] = $aSplit[2]
Else
ReDim $aArray[$i + 1][2]
$aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
$aArray[$i - 1][1] = $aSplit[2]
EndIf
Next
$aArray_BU = $aArray
For $i = 0 To UBound($aArray) - 1
If $aArray[$i][1] <> "" Then
$aIndexes = _ArrayFindAll($aArray, $aArray[$i][1], 0, 0, 0, 0, 2)
If UBound($aIndexes) > 0 Then
ReDim $aArray2[$i + 1][2]
$aArray2[$i][0] = $aArray[$i][1]
$aArray2[$i][1] = UBound($aIndexes)
For $y = 0 To UBound($aIndexes) - 1
$aArray[$aIndexes[$y]][0] = ''
$aArray[$aIndexes[$y]][1] = ''
Next
EndIf
EndIf
Next
_ArraySort($aArray2, 2, 0, 0, 1)
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen("Sortierte_Hitliste.txt", 1)
For $i = 0 To UBound($aArray2) - 1
If $aArray2[$i][1] <> "" Then
$aIndexes = _ArrayFindAll($aArray_BU, $aArray2[$i][0], 0, 0, 0, 0, 2)
If UBound($aIndexes) > 0 Then
FileWriteLine($hFile, $aArray_BU[$aIndexes[0]][1] & "(" & UBound($aIndexes) & "x)" & @CRLF & "--------------------" & @CRLF)
For $y = 0 To UBound($aIndexes) - 1
FileWriteLine($hFile, $aArray_BU[$aIndexes[$y]][0] & @CRLF)
$aArray_BU[$aIndexes[$y]][0] = ''
$aArray_BU[$aIndexes[$y]][1] = ''
Next
FileWriteLine($hFile, @CRLF)
EndIf
EndIf
Next
FileClose($hFile)