Heute ist es wieder soweit. Das Forum ist wieder ein Jahr älter geworden.
8 Jahre ist AutoIt.de nun bereits online. Ich bin ja "erst" seit etwas über 6 Jahren dabei, aber was ich bisher miterleben durfte war doch recht positiv.
Es gab (und gibt) zwar immer auch einige Trolle, aber ich denke, die haben wir über die Jahre ganz gut in den Griff bekommen bzw. schnell in die Bedeutungslosigkeit zurückgeschickt.
Insgesamt fühle ich mich sehr wohl in diesem Forum. Was wohl zum überwiegenden Teil daran liegt, dass es hier sehr viel aktive und kompetente User gibt, die sich nicht zu schade sind anderen Usern zu helfen und dem Forum so manch tolles Script zur Verfügung stellen.
Somit feiern wir einfach einen weiteren Geburtstag dieses Forums.
Viel Spaß euch allen und macht weiter so. ![]()
Beiträge von Oscar
-
-
Du hast aber vergessen Dein Script zu posten, indem der Effekt (nicht) zu sehen ist.
Vielleicht ist die Lösung ja ganz einfach, aber nicht jeder hat Lust anhand Deiner Beschreibung erstmal die GUI zu erstellen.
Also so ein bißchen Mithilfe wäre schon sehr hilfreich. -
Der wesentliche Fehler besteht darin, dass es bei einer Binärdatei keine Zeilen gibt, also kann man auch nicht zeilenweise einlesen.
FileReadLine muss also komplett raus aus dem Script und durch FileRead ersetzt werden. Bei FileRead kann man angeben wieviel Daten (Bytes) man einlesen will (siehe Hilfe). -
-
Wenn die Beträge immer Kommabeträge sind, dann funktioniert das:
[autoit]
[/autoit]
#include <Array.au3>
$sData = FileRead(@ScriptDir & '\ktodaten.csv')
ConsoleWrite($sData & @CR)
$aData = StringRegExp($sData, '(?:EUR )*(\-*\d+?\,\d*)(?: EUR)*', 3)
_ArrayDisplay($aData) -
RR04 hatte in Post#4 schonmal auf mein Listview-Datenbank-Beispiel hingewiesen, aber der Link funktioniert nicht.
Deshalb hier mal der richtige Link dorthin: Listview-Datenbank-Beispiel
Eigentlich ist in dem Beispiel schon alles vorhanden. Du musst bloß die Anzahl der Spalten anpassen und die Spaltenüberschriften ändern.
Das Script ist auch reichlich kommentiert. Wenn dann noch Fragen sind... -
Ein Puffer von 1KB ist viel zu klein. Für kleine Dateien ist eine Puffergröße von 32KB sinnvoll. Bei großen Dateien sollte man eher 512KB oder sogar 1MB als Puffer verwenden.
Anderenfalls bremst das auslesen enorm. -
-> verschoben nach Programmieranfragen (mit Gegenleistung)
-
So geht's:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <Constants.au3>$hGui = GUICreate("Meine GUI") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateEdit("", 10, 10, 200, 50)GUISetState(@SW_SHOW) ; Zeigt das leere GUI-Fenster
[/autoit] [autoit][/autoit] [autoit]Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_HIDE, $hGui)Sleep(1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOWNOACTIVATE) ; Zeigt das leere GUI-Fenster
$aPos = WinGetPos($hGui)
_WinAPI_SetWindowPos($hGui, $HWND_TOPMOST, $aPos[0], $aPos[1], $aPos[2], $aPos[3], $SWP_NOACTIVATE)
WinSetOnTop($hGui, "", 0); Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
[/autoit]
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd -
Versuch's damit:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <Constants.au3>$hGui = GUICreate("Meine GUI") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateEdit("", 10, 10)GUISetState(@SW_SHOW) ; Zeigt das leere GUI-Fenster
[/autoit] [autoit][/autoit] [autoit];.................
[/autoit] [autoit][/autoit] [autoit]
;............sleep(2000)
[/autoit] [autoit][/autoit] [autoit]
$aPos = WinGetPos($hGui)
_WinAPI_SetWindowPos($hGui, $HWND_TOPMOST, $aPos[0], $aPos[1], $aPos[2], $aPos[3], $SWP_NOACTIVATE); Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GUIGetMsg()If $msg = $GUI_EVENT_CLOSE Then ExitLoop
[/autoit]
WEnd -
oder mit StringRegExp:
[autoit]
[/autoit]
If StringRegExp(@IPAddress1, "172\.25\.10\..+") Then
MsgBox(2, "test", @IPAddress1)
Else
MsgBox(2, "error", "error")
EndIf -
Mit $BS_ICON funktioniert es unter Win7 aber nicht mehr mit Icon und Text.
-
Stimmt, mein Beispiel funktioniert, glaub ich, erst ab Vista.
Aber Dein Beispiel funktioniert bei mir unter Win7 (64Bit). Wenn das auch unter XP funktioniert, dann haben wir eine Lösung des Problems.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <WinAPI.au3>GUICreate('test')
[/autoit]
$button = GUICtrlCreateButton(' Button', 10, 10, 120, 48)
GUISetState()
$hInstance = _WinAPI_GetModuleHandle("shell32.dll")
$hIcon = _WinAPI_LoadImage($hInstance, 22, $IMAGE_ICON, 0, 0, $LR_DEFAULTSIZE)
GUICtrlSendMsg($button, $BM_SETIMAGE, $IMAGE_ICON, $hIcon)
Do
Until GUIGetMsg() = -3 -
Es geht einfacher: lass das $BS_ICON weg.
Spoiler anzeigen
[autoit]
[/autoit]
GUICreate('test')
GUICtrlCreateButton(' Button', 10, 10, 120, 48)
GUICtrlSetImage(-1, 'shell32.dll', 23)
GUISetState()
Do
Until GUIGetMsg() = -3 -
[verschoben nach Hilfe&Unterstützung]
-
So geht's:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
;~ #include 'CommMG.au3'Global Const $UDM_SETACCEL = 1131
[/autoit] [autoit][/autoit] [autoit]
Global Const $UDM_SETRANGE32 = 1135
Global Const $UDM_SETPOS32 = 1137
Global $UDACCEL = DllStructCreate('UINT nSec; UINT nInc')
Global $pUDACCEL = DllStructGetPtr($UDACCEL)
DllStructSetData($UDACCEL, 'nSec', 0)
DllStructSetData($UDACCEL, 'nInc', 100) ; <- Hier die Sprungweite angebenGlobal $sportSetError = ''
[/autoit] [autoit][/autoit] [autoit]Global $CMPort = 3 ; Port
[/autoit] [autoit][/autoit] [autoit]
Global $CmBoBaud = 9600 ; Baud
Global $CmboDataBits = 8 ; Data Bits
Global $CmBoParity = "none" ; Parity
Global $CmBoStop = 1 ; Stop
Global $setflow = 2 ; Flow
Global $RTSMode = 1
Global $DTRMode = 1
Global $iWait = 0;~ _CommSetPort($CMPort, $sportSetError, $CmBoBaud, $CmboDataBits, $CmBoParity, $CmBoStop, $setflow, $RTSMode, $DTRMode)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; GUI erstellen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICreate("Foto", 1000, 400)GUICtrlCreateLabel("Startverzögerung in Mikrosekunden", 10, 10)
[/autoit] [autoit][/autoit] [autoit]
$startverzoegerung = GUICtrlCreateInput("500000", 600, 10, 100, 20)
GUICtrlCreateUpdown($startverzoegerung)
GUICtrlSendMsg(-1, $UDM_SETRANGE32, 0, 999999) ; Wertebereich (0 - 999999) setzen
GUICtrlSendMsg(-1, $UDM_SETPOS32, 0, 500000) ; Standardwert setzen (500000)
GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL) ; Sprungweite setzenGUICtrlCreateLabel("Verzögerung zwischen Magnet Abschaltung und Kameraauslösung in Mikrosekunden", 10, 50)
[/autoit] [autoit][/autoit] [autoit]
$verzoegerung = GUICtrlCreateInput("500000", 600, 50, 100, 20)
GUICtrlCreateUpdown($verzoegerung)
GUICtrlSendMsg(-1, $UDM_SETRANGE32, 0, 999999) ; Wertebereich (0 - 999999) setzen
GUICtrlSendMsg(-1, $UDM_SETPOS32, 0, 500000) ; Standardwert (500000) setzen
GUICtrlSendMsg(-1, $UDM_SETACCEL, 1, $pUDACCEL) ; Sprungweite setzen$fotomachen = GUICtrlCreateButton("Starten", 10, 80, 100, 30)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Magnet Schalten", 10, 150)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$magnetein = GUICtrlCreateButton("Magnet Ein", 10, 200, 100, 30)
$magnetaus = GUICtrlCreateButton("Magnet Aus", 150, 200, 100, 30)GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $fotomachen
$schalt = "3/" & GUICtrlRead($startverzoegerung) & "/" & GUICtrlRead($verzoegerung) & "/"
ConsoleWrite($schalt & @CR)
;~ _CommSendString($schalt, $iWait)
Case $magnetein
;~ _CommSendString("1/", $iWait)
Case $magnetaus
;~ _CommSendString("2/", $iWait)
EndSwitch
WEnd; GUI MESSAGE LOOP
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitEndSwitch
[/autoit]
WEnd
Ob das allerdings von der Bedienung her gut ist, bleibt dahingestellt...
-
Hast Du es schonmal mit:
[autoit]#AutoIt3Wrapper_UseX64=n
[/autoit]
am Anfang des Scripts probiert? -
Du hast noch nicht viele UDFs geschrieben, oder?
[autoit]
Wenn Du den Defaultwert gleich in die Funktionszeile schreibst und der Benutzer der UDF dann die Funktion so aufruft:Global $sDate = _InputDateBox(1, Default)
[/autoit]
dann wird der String "Default" übernommen.
Deshalb das prüfen.
-
Da es sich hier aber um eine UDF handelt, die möglicherweise in anderen Scripten (mit diversen GUIs) benutzt wird, ist es sinnvoller das $hGui mit anzugeben.
GuiSetState benutzt zwar standardmäßig die zuletzt erstellte Gui, aber es gibt ja auch noch die Timer-UDF, die im ganz ungünstigen Fall dazwischenfunken könnte. -
Hier mal eine Funktion, um den Benutzer nach Datum oder Datum und Uhrzeit zu fragen. Dann braucht man nicht extra eine eigene GUI erstellen.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $sDate = _InputDateBox(1, 'Kopier-Datum')
If @error Then Exit ; Wenn der Benutzer auf Abbrechen geklickt hat, Programm beenden
ConsoleWrite('Datum: "' & $sDate & '"' & @CR & 'Error: ' & @error & @CR);===============================================================================
[/autoit]
; Function Name: _InputDateBox([$iFormat][, $sTitle][, $sText][, $sDefaultDate][, $hParent])
; Description: Fragt den Benutzer nach Datum oder Datum und Uhrzeit und gibt dies als String zurück
; Parameter(s): $iFormat = 0 oder 1
; bei 0 wird nur nach dem Datum gefragt (Uhrzeit wird dann als "000000" zurückgegeben)
; bei 1 wird nach Datum und Uhrzeit gefragt
; Requirement: -
; Return Value(s): bei Erfolg = String in Form von "YYYYMMDDhhmmss"
; bei Abbruch = Leerstring und @error = 1
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _InputDateBox($iFormat = 1, $sTitle = '', $sText = '', $sDefaultDate = '', $hParent = '')
If $iFormat < 0 Or $iFormat > 1 Then $iFormat = 1
If $sTitle = '' Or $sTitle = Default Then $sTitle = 'Datum-Box'
If $sText = '' Or $sText = Default Then $sText = 'Bitte Datum auswählen!'
If $iFormat Then $sText = 'Bitte Datum und Uhrzeit auswählen!'
Local $iOnEventMode = Opt('GUIOnEventMode', 0), $sRetDate = '', $iError = 0
Local $hGui = GUICreate($sTitle, 260 + $iFormat * 85, 130, Default, Default, Default, 8, $hParent)
GUISetBkColor(0xCCCCCC, $hGui)
GUISetIcon('shell32.dll', 24, $hGui)
GUICtrlCreateGroup($sText, 10, 20, 240 + $iFormat * 85, 70)
GUICtrlSetFont(-1, 10, 400, 0, 'Arial', 5)
GUICtrlCreateIcon('shell32.dll', -21, 30, 48, 32, 32)
Local $idDate = GUICtrlCreateDate($sDefaultDate, 75, 49, 150 + $iFormat * 85, 30, $iFormat)
GUICtrlSetFont(-1, 14, 400, 0, 'Verdana', 5)
If $iFormat Then
Local $DTM_SETFORMAT_ = 0x1032
Local $sStyle = 'dd.MM.yyyy HH:mm:ss'
GUICtrlSendMsg($idDate, $DTM_SETFORMAT_, 0, $sStyle)
EndIf
GUICtrlCreateGroup('', -99, -99, 1, 1)
Local $idOk = GUICtrlCreateButton('Ok', 100 + $iFormat * 85, 100, 60, 25, 1) ; <- Value 1 = $BS_DEFPUSHBUTTON
Local $idCancel = GUICtrlCreateButton('Abbrechen', 170 + $iFormat * 85, 100, 80, 25)
GUISetState(@SW_SHOW, $hGui)
While True
Switch GUIGetMsg()
Case $idCancel, -3 ; <- Value -3 = $GUI_EVENT_CLOSE
$iError = 1
ExitLoop
Case $idOk
$sRetDate = StringRegExpReplace(GUICtrlRead($idDate), '(\d{2})\.(\d{2})\.(\d{4}).*', '$3$2$1')
If $iFormat Then
$sRetDate &= StringRegExpReplace(GUICtrlRead($idDate), '\d{2}\.\d{2}\.\d{4} (\d{2}):(\d{2}):(\d{2})', '$1$2$3')
Else
$sRetDate &= '000000'
EndIf
ExitLoop
EndSwitch
WEnd
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOnEventMode)
Return SetError($iError, 0, $sRetDate)
EndFunc ;==>_InputDateBox