Warum möchte nur niemand die Hilfe lesen?
Kapitel: Using AutoIt
Unterpunkte
- AutoIt Window Info Tool
- Window Titles and Text (Basic)
- Window Titles and Text (Advanced)
- Controls
Warum möchte nur niemand die Hilfe lesen?
Kapitel: Using AutoIt
Unterpunkte
- AutoIt Window Info Tool
- Window Titles and Text (Basic)
- Window Titles and Text (Advanced)
- Controls
ZitatOriginal von ManuIt
Das ist mir zu kompliziert.
mfg
Manu
Naja, manchmal muß man schon ein paar gedankliche Klimmzüge machen.
Aber wenn jeweils die Arraypositionen [ungerade] und [gerade] beide Teile des Dateinamen enthalten, läßt sich das doch super auswerten.
Warum verwendest du nicht das Bsp. von progandy? Damit klappt es fehlerfrei.
@Vollnoob
Du hast einen Beitrag im Forum 'Skripte' erstellt.
Wenn du dann den Code aus dem Beitrag entfernst, ist das genauso sinnvoll als ob du versuchst einen Drachen ohne Wind steigen zu lassen.
Welchen Wert sollen denn andere Boardbesucher aus diesem Beitrag jetzt noch schöpfen?
Also unterlaß das bitte in Zukunft.
ZitatOriginal von Fast2
Danke für eure Mühe ich schau mal ob das Funktioniert. Aber hört sich durchaus logisch an dass man guictrlset dingsbums braucht(Warum steht das eigentlich nicht in der Hilfe)?
Ich weiß ja nicht, in welche Hilfe du schaust. Aber wenn du das Bsp. ansiehst steht dort genau das drin.
Hi Alina,
ich habe dir jetzt eine gaaaanz schnuckelige Lösung gebastelt :]
Den Button habe ich als Default Pushbutton definiert, damit man nicht immer zur Maus wechseln muß um die Eingabe zu bestätigen ![]()
Und es wird immer der zuletzt erfaßte Wert angezeigt. Wenn du also eine Liste abarbeitest, siehst du anhand der laufenden Nr. was du zuletzt beim Wickel hattest. Kannst also immer mal zwischendurch 'ne Kaffeepause machen.
:tassen: geht natürlich auch ![]()
#include <GUIConstants.au3>
#include <Date.au3>
Dim $pathINI = @ScriptDir & "\daten.INI"
GUICreate("Datum Eingabe", 200, 120, 100, 45, -1, 0x00000018)
$lastRealDate = GUICtrlCreateLabel('', 90, 7, 80, 17)
$lastNr = GUICtrlCreateLabel('', 10, 30, 60, 17)
$lastDate = GUICtrlCreateLabel('', 90, 30, 60, 17)
$aktNr = GUICtrlCreateLabel('', 10, 63, 60, 17)
$file = GUICtrlCreateInput ( "", 90, 60, 80, 20)
$ok = GUICtrlCreateButton ("OK", 70, 90, 60, 21, $BS_DEFPUSHBUTTON)
If FileExists($pathINI) Then
$val = IniReadSection($pathINI, "dat")
$lfdnr = $val[$val[0][0]][0]
GUICtrlSetData($lastRealDate, _REalinaDatum($val[$val[0][0]][1]))
GUICtrlSetData($lastNr, $lfdnr)
GUICtrlSetData($lastDate, $val[$val[0][0]][1])
GUICtrlSetData($aktNr, StringRight('0000' & $lfdnr+1,5))
Else
$lfdnr = 0
GUICtrlSetData($aktNr, '00001')
EndIf
GUISetState ()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $ok
$date = GUICtrlRead($file)
If $date <> '' Then
$lfdnr += 1
$val = StringSplit($date, '.')
$d = StringRight('0' & $val[1],2)
$m = StringRight('0' & $val[2],2)
If $val[3] > 30 Then
$y = StringRight(19 & $val[3], 4)
Else
$y = StringRight(20 & $val[3], 4)
EndIf
$date2write = StringRight('00000' & _alinaDatum($y, $m, $d),6)
If IniWrite($pathINI, "dat" , _
StringRight('0000' & $lfdnr,5), $date2write) <> 1 Then
GUICtrlSetData($file, 'FEHLER')
Else
GUICtrlSetData($file, '')
GUICtrlSetData($lastRealDate, _REalinaDatum($date2write))
GUICtrlSetData($lastNr, StringRight('0000' & $lfdnr,5))
GUICtrlSetData($lastDate, $date2write)
GUICtrlSetData($aktNr, StringRight('0000' & $lfdnr+1,5))
EndIf
EndIf
EndSelect
Wend
Func _alinaDatum($year, $month, $day)
Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
EndFunc ;==>_alinaDatum
Func _dayOfyear($year, $month, $day)
Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
EndFunc ;==>_dayOfyear
Func _REalinaDatum($DATUM)
Local $yyyy = StringLeft($DATUM, 3) + 1989
Local $date = _DateAdd('d', Number(StringRight($DATUM, 3))-1, $yyyy & '/01/01')
Return StringRight($date,2) & '.' & StringMid($date,6,2) & '.' & StringLeft($date,4)
EndFunc
Edit: Und noch ein wenig mehr Komfort. Du siehst jetzt immer den zuletzt eingetragenen Wert mit: lfd. Nr / konvertiertem Datum / Originaldatum
Hi, probiers mal so:
#include <GUIConstants.au3>
#include <Date.au3>
$val = IniReadSection(@ScriptDir & "daten.ini", "dat")
$lfdnr = $val[$val[0][0]][0]
GUICreate("Datum Eingabe", 100,80, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES
;~ $nr = GUICtrlCreateInput ( "", 10, 5, 80, 20)
$file = GUICtrlCreateInput ( "", 10, 30, 80, 20)
$ok = GUICtrlCreateButton ("Ok", 20, 55, 60, 20)
GUISetState ()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $ok
$lfdnr += 1
$date = GUICtrlRead($file)
$val = StringSplit($date, '.')
$d = StringRight('0' & $val[1],2)
$m = StringRight('0' & $val[2],2)
If $val[3] > 30 Then
$y = StringRight(19 & $val[3], 4)
Else
$y = StringRight(20 & $val[3], 4)
EndIf
IniWrite(@ScriptDir & "daten.ini", "dat" , $lfdnr, _alinaDatum($y, $m, $d)); & @CRLF)
EndSelect
Wend
Func _alinaDatum($year, $month, $day)
Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
EndFunc ;==>_alinaDatum
Func _dayOfyear($year, $month, $day)
Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
EndFunc ;==>_dayOfyear
$val = IniReadSection($INI, 'section')
letzter Schlüssel = $val[$val[0]][0]
letzter Wert = $val[$val[0]][1]
Beim Start Aufrufen und mit GUICtrlSetData() eintragen.
Edit: Aber willst du die lfd. Nr. nicht lieber automatisch hochzählen? User machen nur Fehler ![]()
Also in der GUI ganz rauslassen. Beim Start Auslesen und für aktuelle Nutzung +1.
Hi Alina,
also die Aufgabe ist ja bereits durch die Funktionen von Xeno gelöst.
Die Verwendung von Arrays ist für diese Aufgabe leider gar nicht zu gebrauchen.
Hier die Lösung für die Aufgabe, für Arrays mußt du dir jetzt was neues ausdenken ![]()
Ich habs so gemacht, dass es egal ist, ob du '1.5.79' oder '01.05.1979' eingibst.
#include <GUIConstants.au3>
#include <Date.au3>
GUICreate("Datum Eingabe", 100,50, 100, 45, -1, 0x00000018); WS_EX_ACCEPTFILES
$file = GUICtrlCreateInput ( "", 10, 5, 80, 20)
$ok = GUICtrlCreateButton ("Ok", 20, 25, 60, 20)
GUISetState ()
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $ok
$date = GUICtrlRead($file)
$val = StringSplit($date, '.')
$d = StringRight('0' & $val[1],2)
$m = StringRight('0' & $val[2],2)
If $val[3] > 30 Then
$y = StringRight(19 & $val[3], 4)
Else
$y = StringRight(20 & $val[3], 4)
EndIf
; statt ConsoleWrite ==> in INI schreiben
ConsoleWrite(_alinaDatum($y, $m, $d) & @CRLF)
EndSelect
Wend
Func _alinaDatum($year, $month, $day)
Return StringFormat('%0.3d', $year - 1989) & StringFormat('%0.3d', _dayOfyear($year, $month, $day))
EndFunc ;==>_alinaDatum
Func _dayOfyear($year, $month, $day)
Return _DateDiff('d', $year & '/01/01', $year & '/' & $month & '/' & $day) + 1
EndFunc ;==>_dayOfyear
Auch von mir ein Herzliches :willkommen:
Wirst dich hier ganz sicher wohl fühlen ![]()
Hab grad mal versucht zu verstehen, was du als Endergebnis haben möchtest.
Das Datum, das du verwendest ist aber kein Julianisches Datum, denn dieses wird angegeben in der Zahl der Tage, die seit dem 1. Januar 4712 v. Chr.12:00 Uhr vergangen sind.
Der 21.01.1997 ist Julianisch: 2450469,5
Also, ich bin mir jetzt nicht ganz sicher, was du erreichen möchtest. Vielleicht kannst du das nochmal kurz skizzieren.
Ich vermisse bei deiner Zusammenstellung eine Zuweisung für den Monat?
Nur mal nach einem kurzen Blick, die notwendigen Korrekturen, die Array betreffend:
#include <GUIConstants.au3>
#include <Date.au3>
Dim $arTest[50] ; Array hat 50 Werte ==> OK
;~ Dim $arTest[0] ; Array's kleinster Wert = 0, also $arTest[0] ==> FALSCH
; Array wurde nochmal deklariert mit Größe '0' - das geht nicht, kleinste Größe 1
Dim $arJahr[20] ; Array hat 20 Werte ==> ZU KLEIN, da 21 Werte gesetzt
;~ Dim $arJahr[0] ; Array's kleinster Wert = 0; also $arJahr[0] ==> FALSCH
; selber Fehler, wie oben
; hier die 50 Array-Werte
; Wenn fortlaufende Werte gesetzt werden sollen empfiehlt sich der Einsatz einer Schleife
; Beachten: Index 0 = Wert 1 ==> also immer: Wert = Index+1
For $i = 0 To 49
$arTest[0] = $i +1
Next
; Hier wird in jeder Zeile das Array neu deklariert!!! ==> FALSCH
;~ Dim $arJahr[0] = '001' ; 1990
;~ Dim $arJahr[1] = '002' ; 1991
; Wertzuweisung ohne Dim!
For $i = 0 To 20
$arJahr[$i] = '00' & $i +1
Next
Nachher schau ich dann mal, was es eigentlich werden soll ![]()
Nochmal zum besseren Verständnis.
Wir nehmen an:
$clickspeed = 750
- Maus wird gedrückt -> Zähler+1 ; aktuell 1
- Prüfe Zähler = 2 -> Nein
- Else-Zweig -> Starte Zeitmessung -> Zähler = 1
Schleife von vorn
- Maus wird gedrückt -> Zähler+1 ; aktuell 2
- Prüfe Zähler = 2 -> JA
- Zeitdifferenz ermitteln
- Differenz < 750 -> das ist ein Doppelklick -> Zähler auf Null
- Differenz > 750 -> Einfachklick -> Starte Zeitmessung -> Zähler = 1
Durch das Rücksetzen des Zählers bei Zeitüberschreitung ist garantiert, dass nur 'echte' Doppelklicks gewertet werden.
Nein!
Wird die in der Registry eingetragene Zeit für Doppelklick überschritten ist es kein Doppelklick.
- Mausklick -> Zähler+1 -> Zeitmessung starten
- Wenn Zähler = 2 -> Zeitdifferenz zum ersten Klick feststellen
- Ist Diff. < Registrywert -> war ein Doppelklick -> Zähler zurücksetzen -> Aufruf Dbl-Klick-Funktion
Hier hast du die Version für Doppelklick:
#Include <Misc.au3>
Global $start
Global $n = 0
Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
HotKeySet('^e', '_ende')
While 1
Do
Sleep(100)
Until _IsPressed('01')
$n += 1
If $n = 2 And (TimerDiff($start) < $clickspeed) Then
_DblClick()
$n = 0
Else
$start = TimerInit()
$n = 1
EndIf
WEnd
Func _DblClick()
MsgBox(0, '',(WinGetTitle(''))
EndFunc
Func _ende()
Exit
EndFunc
ZitatAlina
Also mein größtes Problem habe ich z. B. mit Array. Da ist mein Verständnis einfach nicht da.
Hi Alina, schau doch mal in unser Wiki. Da hab ich einen Link eingestellt für ein Tutorial, findest du auch in der Hilfe-FAQ.
Array-Tutorial
Ich hoffe, dass euch das ein wenig hilft.
Hier mal eine 'saubere' Lösung:
#include <GUIConstants.au3>
Opt("MouseCoordMode", 0)
Opt("GUIOnEventMode", 1)
Dim $Input_X = 80, $Input_Width = 120
Dim $Input_Y = 50, $Input_Height = 21
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 316, 147, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_LeftMouse')
$Input1 = GUICtrlCreateInput("Input1", $Input_X, $Input_Y, $Input_Width, $Input_Height)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func Form1Close()
Exit
EndFunc
Func _LeftMouse()
Local $pos = MouseGetPos()
If ( $pos[0] > $Input_X And $pos[0] < $Input_X+$Input_Width ) And _
( $pos[1] > $Input_Y+20 And $pos[1] < $Input_Y+$Input_Height+20) Then _
GUICtrlSetData($Input1, '')
EndFunc
klar geht das ![]()
In der Definition müssen die Argumente als Variablen definiert werden.
Func Summe($argument1, $argument2)
Return $argument1 + $argument2
EndFunc
Jein ![]()
mit Originalfunktionalität nicht. Dazu mußt du auswerten
- Mausposition abfragen
- ist die Maus über dem Control UND
- wird geklickt
dann GUIControlSetData($Input, '')
Also wenn ich mich mal an meinen Mathe-Extrakurs erinnere (lang ist's her), dann wird dieser Weg nicht die exakte Wahrscheinlichkeit bringen.
Das sind stochastische Berechnungen. Beim Würfeln gilt das Laplace-Modell (idealer Würfel). Und damit beträgt die Wahrscheinlichkeit eine Zahl zu würfeln exakt 1/6.
Die tatsächliche Streuung, das ist das, was du vermutlich ermitteln möchtest, benötigt eine Großzahl von Ergebnissen um zu einer (halbwegs) verläßlichen Aussage zu kommen. Damit siehst du dann, welche Zahlen gehäuft gezogen werden. Aber auch diese Häufung kann dir nur begrenzt Auskunft über die mögliche nächste Zahl geben.
Und die von mir oben angeführte Methode ist eigentlich eine Methode zur Häufungsermittlung.
(Alle gezogenen Zahlen in einen Topf, sortieren nach Häufigkeit des Auftretens)