1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • vgl. StringRegExp() StringReplace() StringInStr()

    • BugFix
    • 31. Mai 2015 um 09:50
    Zitat von Andy

    Für mich sieht das so aus, als ob, nachdem in einigen Threads im EN-Forum das "elitäre" RegEx mit "simplen" Stringfunktionen geschwindigkeitsmäßig an die Wand gespielt wurde, dieses "Sakrileg" in den neueren AutoIt-Versionen einfach "korrigiert" wurde.

    Das klingt sehr wahrscheinlich. RegEx in AutoIt ist nicht sonderlich schnell, dass ist sicherlich dem Jos sofort aufgefallen als er seine AutoIt-Tools in Lua geschrieben hat und somit vergleichen konnte. Dort sind schon die Stringoperationen mit Pattern nutzbar (was ich sehr praktisch finde) und zusätzlich kann man dann noch mit einer RegEx-Library arbeiten, beides affenartig schnell. Und da es syntaktisch durchaus vorteilhaft ist mit Pattern zu arbeiten, musste wohl ein Grund konstruiert werden eine RegEx-Nutzung zum Goldstatus zu erheben. Und sei es darum all jenen, die mit RegEx nicht so warm werden klar zu machen (völlig zu unrecht) , sie seien keinesfalls elitär?
    Ich verwende viel RegEx, das ist einfach dem Umstand geschuldet, dass ich viel komplexe Textverarbeitung mache (auch in Lua und Python) und somit kein Weg an RegEx vorbeiführt. Da fängt man dann schon an in RegEx zu denken und übersieht durchaus, dass manchmal eine simple native Stringoperation den Zweck auch erfüllt.

  • Windows GUI aktiv halten?!

    • BugFix
    • 30. Mai 2015 um 23:03
    Zitat von michael34

    dass eine Webseite alle 30 Minuten aufruft und diese ausliest

    Lies doch die Seite nicht aus einem Browserfenster, sondern direkt per InetGet. Dann stellt sich die Problematik gar nicht.

  • DateDiff bestimmter Monat innerhalb eines Zeitraums

    • BugFix
    • 30. Mai 2015 um 22:18
    Zitat von xbl38spezial

    Einer InputBox das kaufmännische Euro-Format vorgeben kann man aber nicht, oder?

    Doch das geht, GuiRegisterMsg verwenden mit WM_COMMAND und $EN_CHANGE auswerten - den Inhalt lesen und sofort im erforderlichen Format zurückschreiben.

  • Tree-View aus einer Textdatei auslesen

    • BugFix
    • 30. Mai 2015 um 10:18

    Vielleicht hilft dir das weiter.

  • Variablenname in for-Schleife hochzählen

    • BugFix
    • 29. Mai 2015 um 11:14

    In deinem Fall könntest du Eval() / Assign() für deine Variable $flabelnote zwar verwenden, nicht aber für $STATION. Eval/Assign kann nicht mit Arrays genutzt werden.
    Also ändere dein Skript auf reine Arraynutzung. Ist im Moment vielleicht etwas Arbeit - da es aber nicht anders geht, bleibt dir eh keine Wahl.

  • Child Window& GUICTRL

    • BugFix
    • 27. Mai 2015 um 10:26
    Zitat von rallemeister

    dass hatte ich auch schon herausgefunden, aber dann ist es nicht mehr an das Hauptfenster gebunden... Darum ging es ja...

    Verwende WS_EX_MDICHILD und erstelle die GUI am Anfang und nicht bei jedem Aufruf neu:

    AutoIt
    Global $gDatenbankMain, $OpenDatabase = 0
    
    
    Opt("GUIOnEventMode", 1)
    #Region
    $gMain = GUICreate("Diluma Formular Builder V 1.0", @DesktopWidth-20, @DesktopHeight-100, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetOnEvent($GUI_EVENT_CLOSE, "wClose")
    $mFile = GUICtrlCreateMenu("&Datei")
    $mDateiOeffnen = GUICtrlCreateMenuItem("&öffnen"  , $mFile)
    $mDateiSpeichern = GUICtrlCreateMenuItem("&speichern"  , $mFile)
    $mDateiExit = GUICtrlCreateMenuItem("&Exit" & @TAB & "         Esc", $mFile)
    GUICtrlSetOnEvent(-1, "wClose")
    $mFile2 = GUICtrlCreateMenu("&Datenbank")
    $mDatenbankOeffnen = GUICtrlCreateMenuItem("&Anbindung setzen"  , $mFile2)
    GUICtrlSetOnEvent(-1, "DatenbankOeffnen")
    
    
    ; Child
    $gDatenbankMain = GUICreate("Datenbank Anbindung", 363, 123, 0, 0,BitOR($WS_CAPTION,$WS_MINIMIZEBOX,$WS_SYSMENU), $WS_EX_MDICHILD, $gMain)
    GUISetOnEvent($GUI_EVENT_CLOSE, "wClose")
    $gHost = GUICtrlCreateInput("", 96, 8, 249, 21)
    $gDatenbank = GUICtrlCreateInput("", 96, 34, 121, 21)
    $gBenutzer = GUICtrlCreateInput("", 96, 60, 121, 21)
    $gPasswort = GUICtrlCreateInput("", 96, 86, 121, 21)
    $g1Label1 = GUICtrlCreateLabel("Host", 16, 10, 26, 17)
    $g1Label2 = GUICtrlCreateLabel("Datenbank", 16, 34, 57, 17)
    $g1Label3 = GUICtrlCreateLabel("Benutzername", 16, 60, 72, 17)
    $g1Label4 = GUICtrlCreateLabel("Passwort", 16, 88, 47, 17)
    $gBTestDatabase = GUICtrlCreateButton("Test", 232, 32, 113, 25)
    $gBSpeicherDatenbank = GUICtrlCreateButton("speichern", 232, 64, 113, 41)
    
    
    GUISetState(@SW_SHOW, $gMain)
    #EndRegion
    
    
    
    
    while 1
    	Sleep(50)
    WEnd
    
    
    Func DatenbankOeffnen()
    		If $OpenDatabase = 1 Then Return
    		GUISetState(@SW_HIDE, $gMain)
    		GUISetState(@SW_SHOW, $gDatenbankMain)
    		$OpenDatabase = 1
    EndFunc
    
    
    
    
    Func wClose()
    	Switch @GUI_WINHANDLE ; See which GUI sent the CLOSE message
    		Case $gMain
    			Exit
    		Case $gDatenbankMain
    			GUISetState(@SW_HIDE, $gDatenbankMain)
    			GUISetState(@SW_SHOW, $gMain)
    			$OpenDatabase = 0
    	EndSwitch
    EndFunc
    Alles anzeigen
  • 2d array - warum so und nicht anders ?

    • BugFix
    • 27. Mai 2015 um 10:04
    Zitat von Peter S. Taler

    Das würde bedeuten Mehrdimmensionale Arrays können nicht zeilenweise befüllt werden?

    Arrays können ausschliesslich während der Deklaration komplett befüllt werden (egal ob 1D oder 2D). Ein bereits erstelltes Array ist nur noch über jedes einzelne Element befüllbar.
    Kann man syntaktisch umgehen, indem man Arrays im Array verwendet. Allerdings muss man dann beim Lesen/Schreiben von Werten innerhalb dieses Array-Im-Array selbiges zuerst in eine separate Variable lesen um Zugriff zu erlangen. Wobei zum Lesen ein Kapseln des Zugriffs schon reicht:

    AutoIt
    Local $aInner_1[] = [1,2,3]
    Local $aInner_2[] = [4,5,6]
    Local $aOuter[] = [$aInner_1,$aInner_2]
    
    
    ; Lesen
    For $i = 0 To UBound($aOuter) -1
    	For $j = 0 To UBound($aOuter[$i]) -1
    		ConsoleWrite('Outer[' & $i & '] - Inner[' & $j & ']: ' & ($aOuter[$i])[$j] & @CRLF)
    	Next
    Next
    
    
    ; Schreiben
    For $i = 0 To UBound($aOuter) -1
    	$aTmp = $aOuter[$i]
    	For $j = 0 To UBound($aTmp) -1
    		$aTmp[$j] += 10
    	Next
    	$aOuter[$i] = $aTmp
    Next
    Alles anzeigen
  • Datum / Ostersonntag.

    • BugFix
    • 26. Mai 2015 um 22:04

    Die Funktion hatte ich 2007 geschrieben. Jetzt habe ich mal noch den Code etwas aufgeräumt und eine Syntaxanpassung an die aktuelle Version vorgenommen-

    AutoIt
    ;===============================================================================
    ; Description:     returns the date of easter in specified year between 1583 and 2999
    ; Parameter(s):    $year
    ; Return Value(s): On Success - easterdate (sunday)
    ;                  On Failure - -1
    ; Author(s):       BugFix (bugfixautoit.de)
    ;===============================================================================
    Func _Easter($year)
    	;Determination Easter with formula by C. F. Gauss
    	Local $a, $b, $c, $d, $e, $H1, $H2, $N, $M, $EasterDay, $EasterMonth
    	If $year < 1583 Or $year > 2999 Then Return -1
    	$a = Mod($year, 19)
    	$b = Mod($year, 4)
    	$c = Mod($year, 7)
    	$H1 = Int($year/100)
    	$H2 = Int($year/400)
    	$N = 4 + $H1 - $H2
    	$M = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13)/25))
    	$d = Mod((19 * $a + $M), 30)
    	$e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
    	$EasterDay = ($d + $e = 35) ? 50 : (($d = 28 And $e = 6 And $a > 10) ? 49 : (22 + $d + $e))
    	$EasterMonth = '03'
    	If $EasterDay > 31 Then
    		$EasterDay -= 31
    		$EasterMonth = '04'
    	EndIf
    	; $EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay ; english notation
    	$EasterDate = StringRight('0' & $EasterDay, 2) & "." & $EasterMonth & "." & $year ; german notation
    	Return $EasterDate
    EndFunc   ;==>_Easter
    Alles anzeigen
  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 21:28
    Zitat von bernd670

    du weißt aber schon das du so nur eine Zeitangabe speichern kannst?

    Ja, das ist auch das Ziel.

  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 15:01
    Zitat von AspirinJunkie

    Zur Lösung würde ich zu HeapAlloc raten.

    Ist mit Sicherheit die sauberste Lösung. Für den von mir gewollten Zweck werde ich aber auf Local Static zurückgreifen. Zum Einen wird die Struktur u.U. mehrfach hintereinander genutzt und zum Anderen muß der User dann nicht dran denken den Speicher freizugeben.

    Danke noch mal.

  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 14:15

    Grr, ist ja eigentlich klar. Danke für die Erleuchtung. 8o

  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 14:05
    Zitat von AspirinJunkie

    Was meinst du exakt mit "fehlerhafte Werte"?

    Ist ja krass, ich bekomme folgende Ausgabe (reproduzierbar):

    Bash
    Check Feld 1: 2015
    Check Feld 2: 05
    Check Feld 3: 26
    Check Feld 4: 14
    Check Feld 5: 03
    Check Feld 6: 31
    Return 1: y
    Return 2: n
    Return 3: 
    Return 4: 
    Return 5: 
    Return 6: 31
    Alles anzeigen

    Ich verwende auch die 3.3.12.0

  • Datum / Ostersonntag.

    • BugFix
    • 26. Mai 2015 um 13:49

    Hier die Osterformel alleine:

    AutoIt
    ;===============================================================================
    ; Description:     returns the date of easter in specified year between 1583 and 2999
    ; Parameter(s):    $year
    ; Return Value(s): On Success - easterdate (sunday)
    ;                  On Failure - -1
    ; Author(s):       BugFix (bugfix@autoit.de)
    ;===============================================================================
    Func _Easter($year)
    	;Determination Easter with formula by C. F. Gauss
    	If $year > 1582 And $year < 3000 Then
    		$a = Mod($year, 19)
    		$b = Mod($year, 4)
    		$c = Mod($year, 7)
    		$H1 = Int($year / 100)
    		$H2 = Int($year / 400)
    		$N = 4 + $H1 - $H2
    		$M = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13) / 25))
    		$d = Mod((19 * $a + $M), 30)
    		$e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
    		If $d + $e = 35 Then
    			$Easter = 50
    		Else
    			If $d = 28 And $e = 6 And $a > 10 Then
    				$Easter = 49
    			Else
    				$Easter = 22 + $d + $e
    			EndIf
    		EndIf
    		If $Easter < 32 Then
    			$EasterDay = $Easter
    			$EasterMonth = "03"
    		Else
    			$EasterDay = $Easter - 31
    			$EasterMonth = "04"
    		EndIf
    		If $EasterDay < 10 Then
    			$EasterDay = "0" & $EasterDay
    		EndIf
    		; $EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay ; english notation
    		$EasterDate = $EasterDay & "." & $EasterMonth & "." & $year ; german notation
    	Else
    		$EasterDate = -1; input year is out of range
    	EndIf
    	Return $EasterDate
    EndFunc   ;==>_easter
    Alles anzeigen
  • Child Window& GUICTRL

    • BugFix
    • 26. Mai 2015 um 12:36

    Das Main-Window hat einen sehr seltsamen Style-Mix. Einige dieser Styles widersprechen sich selbst (z.B. POPUP und CAPTION).
    Erstelle also das Main erst mal mit gültigem Style, vielleicht ist dein Problem dann schon gelöst.

  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 12:28
    Zitat von minx

    das "." darf offensichtlich nicht verwendet werden:

    Ist zwar unverständlich, wenn es in der Stable angeführt wird aber auch eine Verwendung von DllStructGetData statt dessen führt zum selben Fehler.

  • Dynamische Varibale -- aus Funktion

    • BugFix
    • 26. Mai 2015 um 12:16

    Du kannst Variablen auch vorher erstellen und als Referenz übergeben, sodass diese innerhalb der Funktion befüllt werden. Geht mit einzelnen Werten oder auch mit Array-Variablen.

    AutoIt
    Local $var1, $var2
    ConsoleWrite('$var1: ' & $var1 & @TAB & '$var2: ' & $var2 & @CRLF)
    
    
    _Some($var1, $var2)
    ConsoleWrite('$var1: ' & $var1 & @TAB & '$var2: ' & $var2 & @CRLF)
    
    
    Func _Some(ByRef $v1, ByRef $v2)
    	$v1 = @MIN
    	$v2 = @SEC
    EndFunc
    Alles anzeigen
  • Struktur wird aus Pointer fehlerhaft befüllt

    • BugFix
    • 26. Mai 2015 um 12:03

    Hi,
    ich habe das Problem mal auf folgende Funktion reduziert, in der der Fehler entsteht.
    Ich erstelle eine Struktur und befülle diese mit Werten. Die Struktur selbst wird als Pointer in einer anderen Struktur abgespeichert, ebenso der Struktur--String. Die Überprüfumg innerhalb der Funktion ist erfolgreich. Jedoch liefert dieselbe Überprüfung mit der zurückgegebenen Struktur fehlerhafte Werte. Jemand eine Idee warum?

    AutoIt
    $tRet = _SomeFunc()
    $tRetTime = DllStructCreate($tRet.tagTime, $tRet.Time)
    For $i = 1 To 6
    	ConsoleWrite('Return ' & $i & ': ' & DllStructGetData($tRetTime, $i) & @CRLF)
    Next
    
    
    Func _SomeFunc()
    	Local $tagTime = 'char Year[4];char Month[2];char Day[2];char Hour[2];char Min[2];char Sec[2]'
    	Local $tTime = DllStructCreate($tagTime)
    	DllStructSetData($tTime, 'Year',  @YEAR)
    	DllStructSetData($tTime, 'Month', @MON)
    	DllStructSetData($tTime, 'Day',   @MDAY)
    	DllStructSetData($tTime, 'Hour',  @HOUR)
    	DllStructSetData($tTime, 'Min',   @MIN)
    	DllStructSetData($tTime, 'Sec',   @SEC)
    	Local $t = DllStructCreate('struct;ptr Time;char tagTime[75];endstruct')
    	DllStructSetData($t, 'Time', DllStructGetPtr($tTime))
    	DllStructSetData($t, 'tagTime', $tagTime)
    
    
    	; prüfen ob Struktur gefüllt und auslesbar
    	Local $tCheck = DllStructCreate($t.tagTime, $t.Time)
    	For $i = 1 To 6
    		ConsoleWrite('Check Feld ' & $i & ': ' & DllStructGetData($tCheck, $i) & @CRLF)
    	Next
    
    
    	Return $t
    EndFunc
    Alles anzeigen
  • Input inhalt löschen

    • BugFix
    • 22. Mai 2015 um 18:48
    Zitat von Silvermoon

    schreibe ich Werte in die Inputbox meine zweite Gui.

    Wenn es DEINE Gui ist, dann setzt du die Daten bitte schön mit GuiCtrlSetData.
    Und vor dem Eintragen neuer Daten brauchst du die alten nicht löschen - die werden überschrieben.

  • Warum mehr Arbeit als nötig? IDENTISCHES AUTOIT auf mehreren PC's

    • BugFix
    • 21. Mai 2015 um 15:29

    Ich nehme an du nutzt Win7.
    Da findest du die Settings hier: C:\Users\USERNAME\AppData\Local\AutoIt v3\SciTE

  • Frage zu einem Script

    • BugFix
    • 21. Mai 2015 um 14:31
    Zitat von BigRox

    aus und du wirst sehen, warum ich die Position des Buttons testen muss.

    ..weil du vergisst, das Label auf DISABLE zu setzen. ;)

    AutoIt
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Opt("MouseCoordMode", 2)
    ; Die GUI erstellen.
    $GUI = GUICreate("Form1", 600, 500, -1, -1)
    GUISetBkColor(0x6791C9)
    ; Ein Label in der GUI erstellen.
    $Label1 = GUICtrlCreateLabel("Nur ein Test", 64, 72, 468, 324, BitOR($SS_CENTER, $SS_SUNKEN, $WS_BORDER), $WS_EX_CLIENTEDGE)
    GUICtrlSetBkColor($Label1, 0x00FF00)
    
    
    ; >> LABEL muss inaktiv sein!!
    GUICtrlSetState($Label1, $GUI_DISABLE)
    
    
    ; Einen Button in dem Label erstellen.
    $Button1 = GUICtrlCreateButton("Klick mich.", 176, 176, 209, 81)
    GUICtrlSetBkColor($Button1, 0xFF0000)
    
    
    ; Die GUI anzeigen.
    GUISetState(@SW_SHOW, $GUI)
    While 1
    	$Msg = GUIGetMsg()
    	Switch $Msg
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $Button1
    			ConsoleWrite('CLICK' & @CRLF)
    	EndSwitch
    WEnd
    GUIDelete($GUI)
    Exit
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™