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

  • TFT Auflösung ändern

    • BugFix
    • 4. März 2008 um 18:08
    Zitat

    1) So wie ich das verstehe, Fragst du ab, ob er am Anfang die Auflösung 800 x 600 hat. Falls Ja soll er dann auf 1024*768 umstellen.


    Ich hatte dort nur unterschiedliche Werte zum Testen.
    Ich frage ab ob der aktuelle Wert (Breite) kleiner als der Zielwert ist.
    wenn ja ==> Betätigung Pfeiltaste rechts, Regler wandert eine Stufe höher
    wenn nein ==> Betätigung Pfeiltaste links, Regler wandert eine Stufe tiefer
    und Schleife wird nochmal durchlaufen mit Prüfung am Beginn der Schleife ob gewünschte Einstellung erreicht, falls ja wird sofort die Schleife verlassen, "Übernehmen" und "OK" gedrückt.
    Die Bit-Einstellung passt Windows teilweise automatisch an, da zu bestimmten Auflösungen der Grafikadapter auch bestimmte Bit-Einstellungen erfordert. Macht auch Sinn, da man sich mit falschen Angaben einiges zerschießen könnte.

    Eigentlich sollte die Funktion auch sauber arbeiten, bei mir klappt das. Hast du auch die Größe korrekt eingegeben (Breite-Leerzeichen-x-Leerzeichen-Höhe) ?

    Edit:
    Achja, umstellen der Farbtiefe.
    Die gewünschte Farbtiefe in exakter Schreibweise eintragen ( 'Höchste (32 Bit)', 'Mittlere (16 Bit)' )
    Am besten vorher Auslesen mit

    [autoit]

    $tiefe = ControlCommand('Eigenschaften von Anzeige', '', $cbFarbtiefe, 'GetCurrentSelection', '')
    ConsoleWrite($tiefe & @CRLF)

    [/autoit]


    Neu Setzen geht so:

    [autoit]

    $occur = ControlCommand('Eigenschaften von Anzeige', '', $cbFarbtiefe, 'FindString', 'Höchste (32 Bit)')
    ControlCommand('Eigenschaften von Anzeige', '', $cbFarbtiefe, 'SetCurrentSelection', $occur)

    [/autoit]
  • TFT Auflösung ändern

    • BugFix
    • 4. März 2008 um 14:42

    Hi und Willkommen,

    das geht recht einfach, das AutoIt Window Info-Tool gibt dir die nötigen Angaben.
    Ich habs mal erstellt.
    Um zwischen zwei Zuständen hin- und herzuschalten, brauchst du ja nur eine Soll- und Istvariable mit den entsprechenden Angaben führen und einsetzen.

    Spoiler anzeigen
    [autoit]

    Global $Regler_ID = 1808
    Global $Size_ID = 1814
    Global $bt_Uebernehmen = 12321
    Global $bt_OK = 1
    Global $Zielwert1 = '800 x 600 Pixel'
    Global $Zielwert2 = '1024 x 768 Pixel'
    Global $txt

    Run("control.exe DESK.CPL,,3")
    WinWaitActive('Eigenschaften von Anzeige')

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $txt = ControlGetText('Eigenschaften von Anzeige', '', $Size_ID)
    If $txt = $Zielwert2 Then
    ExitLoop
    Else
    If Number(StringLeft($txt, 4)) < Number(StringLeft($Zielwert2, 4)) Then
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{RIGHT}')
    Else
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{LEFT}')
    EndIf
    EndIf
    Sleep(100)
    WEnd
    ControlClick('Eigenschaften von Anzeige', '', $bt_Uebernehmen)
    ControlClick('Eigenschaften von Anzeige', '', $bt_OK)

    [/autoit]
  • macro recorder [gesperrt]

    • BugFix
    • 3. März 2008 um 17:28

    Um alle Tastenanschläge sinnvoll aufzeichnen zu können, brauchst du einen Keylogger.
    Da so etwas aber mißbräuchlich genutzt werden kann, werde ich das hier nicht posten.
    Wenn du es unbedingt erstellen möchtest, wirst du aber mit Google schnell zum Ziel kommen.
    Im EN-Forum wird mit solchen Themen ziemlich lax umgegangen, aber wir wollen in dieser Richtung sauber bleiben.

  • Überwachen eines Prozesses und rebooten des Rechners zu einer bestimmten Zeit

    • BugFix
    • 3. März 2008 um 13:25

    Ja OK, aber welchen Sinn hat diese Konstruktion?
    Ich finde adhoc nur eine sinnvolle Verwendung: Abarbeiten von Fehlerroutinen von großem Fehlerwert abwärts, wobei alle kleineren Routinen jeweils in der größeren enthalten sein müssen.
    Viel sinnvoller erscheint eigentlich das Fortsetzen der Case-Abfragen MIT Bedingungsprüfung.
    Aber der Weg bleibt verschlossen :( - Ein klares 'No Way' von Valik in dieser Richtung.

  • Überwachen eines Prozesses und rebooten des Rechners zu einer bestimmten Zeit

    • BugFix
    • 3. März 2008 um 13:08

    Also ich hab gerade zu diesem Thema eine Diskussion im EN-Forum nachgelesen.
    Wie es aussieht, weiß niemand ganau, welchen Sinn das ContinueCase hat.
    So, wie in der Hilfe beschrieben (Abort the current case and continue a case into the next case in a Select or Switch block.) funktioniert es definitiv nicht.
    Denn dort steht ...beendet den aktuellen Case und setzt beim nächsten Case fort...
    Das bedeutet in meiner Lesweise, dass auch die Überprüfung der Case-Anweisung durchgeführt wird. Und eben dieses passiert nicht.
    Hab jetzt mehrfach probiert, dies ist die Arbeitsweise von ContinueCase:
    Ab dem Moment, wo eine Bedingung TRUE ist, werden alle weiteren per ContinueCase verknüpften Bedingungen ebenfalls als TRUE angesehen!!

    Welchen Sinn macht das dann??

    Also bleibt nur auf If-Then-Else-Statements zurückzugreifen innerhalb des ContinueCase.

  • Überwachen eines Prozesses und rebooten des Rechners zu einer bestimmten Zeit

    • BugFix
    • 3. März 2008 um 12:51

    Habs grad getestet, stimmt: seltsamerweise wird das auf ContinueCase folgende Case OHNE Überprüfung der Case-Bedingung ausgeführt.
    Hab ich keine Erklärung für. ?(

  • Überwachen eines Prozesses und rebooten des Rechners zu einer bestimmten Zeit

    • BugFix
    • 3. März 2008 um 12:07

    ContinueCase funktioniert schon:

    Spoiler anzeigen
    [autoit]

    Global $a = 1, $b = 1, $c = 'ende'
    Select
    Case $a = 1
    MsgBox(0, '', '$a = ' & $a)
    ContinueCase
    Case $b = 1
    MsgBox(0, '', '$b = ' & $b)
    ContinueCase
    Case Else
    MsgBox(0, '', '$c = ' & $c)
    EndSelect

    [/autoit]

    Aber du stellst ja die Bedingung, dass Outlook abstürzt und erst dann die nächste Case-Abfrage erfolgen kann:
    ProcessWaitClose
    Pauses script execution until a given process does not exist.

    Besser so:

    [autoit]

    Select
    Case Not ProcessExists("outlook.exe")
    Run("C:\Programme\Microsoft Office\OFFICE11\OUTLOOK.EXE")
    ContinueCase
    Case _Time() = "10:00:00" ; wenn es 10 Uhr ist soll der Rechner rebootet werden
    _reboot()
    EndSelect

    [/autoit]
  • Überwachen eines Prozesses und rebooten des Rechners zu einer bestimmten Zeit

    • BugFix
    • 3. März 2008 um 11:08

    Hi,
    wenn ein Case eingetroffen ist, wird der nächste nicht abgefragt.
    Wenn du das aber möchtest, muss das so aussehen:

    [autoit]

    Select
    Case $a
    ; Code
    ContinueCase
    Case $b
    ; Code
    ContinueCase
    Case $c
    ; Code
    EndSelect

    [/autoit]
  • Spinnt autoit etwa?

    • BugFix
    • 2. März 2008 um 22:30

    Wenns nicht klappt, ändert dies aber nichts an der Syntax: Hex-Zahlen werden NICHT in Gänsefüßchen gefaßt.

    Edit:
    Bist du sicher, was die Farbe betrifft?
    Die benannte Farbe ist keine standardmäßige Farbe.

  • Spinnt autoit etwa?

    • BugFix
    • 2. März 2008 um 22:21

    Dieser Schwur ist ein Meineid :D

    Versuchs mal mit 0xD9DAE8 statt "0xD9DAE8" - dann klappts auch mit dem Nachbarn :rofl:

  • TextEffects-UDF - Mach mehr aus langweiligem Text (inkl. About-Box)

    • BugFix
    • 2. März 2008 um 20:53

    Gerade in dem Bsp. ist es doch easy :whistling:
    Einfach eine Variable $start einfügen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $txt = 'Ein Lagerregal steht im Lager.'
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 198, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $label = GUICtrlCreateLabel('Texteffekt beginnend bei Position $start', 72, 50, 481, 17)
    $Input1 = GUICtrlCreateInput("", 72, 72, 481, 21)
    GUICtrlSetFont(-1, 9, 400, Default, "Courier New")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    _txt_eff__move_string_through_text($Form1, $Input1, $txt, 9, 300)
    Sleep(2000)
    GUIDelete($Form1)
    Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1Close()
    Exit
    EndFunc
    ;===============================================================================
    ;
    ; Description: Move a string through the given text in the given control.
    ; Syntax: _txt_eff__move_string_through_text($winhandle, $control_id, [$text, [$start=1, [$delay, [$string, [$show_complete_text]]]]])
    ; Parameter(s): $winhandle - Handle of the target window, $control_id - ID of the target control, $text - The text to animate, $delay - Animation speed (1 = fast, 1000 = slow), $string - string to move through, $show_complete_text - 0: uncover text while animatione / 1: show it from start on
    ; Requirement(s): v3.1.1.66 (beta) or later
    ; Return Value(s): 1 - in any case
    ;
    ; Author(s): peethebee <[email='peter_opali@gmx.de'][/email]>
    ; Note(s): None
    ;
    ;===============================================================================
    Func _txt_eff__move_string_through_text($winhandle, $control_id, $text = "", $start=1, $delay = 100, $string = "->", $show_complete_text = 0)
    If $text = "" Then $text = ControlGetText($winhandle, "", $control_id)
    Local $static = _IsStatic($winhandle, $control_id)
    For $i = $start To StringLen($text) + 1
    $out_string = StringLeft($text, $i - 1) & $string
    If $show_complete_text = 1 Then $out_string = $out_string & StringRight($text, StringLen($text) - $i - StringLen($string))
    If $static = 1 Then GUISetState(@SW_LOCK, $winhandle)
    ControlSetText($winhandle, "", $control_id, $out_string)
    If $static = 1 Then GUISetState(@SW_UNLOCK, $winhandle)
    Sleep($delay)
    Next
    If $static = 1 Then GUISetState(@SW_LOCK, $winhandle)
    ControlSetText($winhandle, "", $control_id, $text)
    If $static = 1 Then GUISetState(@SW_UNLOCK, $winhandle)
    Return 1
    EndFunc ;==>_txt_eff__move_string_through_text

    [/autoit] [autoit][/autoit] [autoit]

    Func _IsStatic($winhandle, $control_id)
    Local $ret = DllCall("user32.dll", "int", "GetClassName", "hwnd", ControlGetHandle($winhandle, "", $control_id), "str", "", "int", 128)
    If StringInStr($ret[2], "Static") <> 0 Then Return 1
    Return 0
    EndFunc ;==>_IsStatic

    [/autoit]
  • TextEffects-UDF - Mach mehr aus langweiligem Text (inkl. About-Box)

    • BugFix
    • 2. März 2008 um 18:30

    @DailyAgony:
    Das geht schon. Du mußt dir den Text des Controls zurückgeben lassen (ControlGetText), den Teil, den du fix haben möchtest abschneiden und vor jedem Schreiben des Effektes mit Anfügen. Allerdings mußt du teilweise Leerzeichen einfügen.
    Für alle Effekte sicher nicht sinnvoll.

    So, hab gleich noch einen Effekt erstellt: _txt_eff__fountain($hWnd, $Ctrl_ID, $sText='', $iDelay=-1)
    Hier sprudelt der Text völlig ungeordnet (wie eine Fontäne ;) )von der Mitte nach beiden Seiten in das Control. Dann wird er wieder 'eingesogen' und anschließend in ordentlicher Reihenfolge abwechselnd nach links und rechts ausgegeben.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <String.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $txt = 'Computer ersparen die Zeit, die wir ohne sie nicht bräuchten ;-)'
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 198, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $label = GUICtrlCreateLabel('Text von Mitte, fontänenartig nach beiden Seiten (BugFix)', 72, 50, 481, 17)
    $Input1 = GUICtrlCreateInput("", 72, 72, 481, 21)
    GUICtrlSetFont(-1, 9, 400, Default, "Courier New")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    _txt_eff__fountain($Form1, $Input1, $txt)
    Sleep(2000)
    Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1Close()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; $hWnd Fensterhandle
    ; $Ctrl_ID Control-ID
    ; $sText einzufügender Text, wird nichts übergeben bricht die Funktion ab
    ; $iDelay Verzögerung bis zum Beginn Einfügen nächstes Zeichen
    ; Erfordert <String.au3>
    ;==================================================================================================
    Func _txt_eff__fountain($hWnd, $Ctrl_ID, $sText='', $iDelay=-1)
    If $sText = '' Then Return
    If $iDelay < 0 Then $iDelay = 20
    Local $static = _IsStatic($hWnd, $Ctrl_ID)
    Local $aTxt = StringSplit($sText, ''), $aPop[$aTxt[0]], $leftChars = '', $rightChars = '', $tmpLeft = ''
    Local $tmpVal, $i, $k, $start = Round($aTxt[0]/2), $spaceCnt = $start-1, $random, $char, $side = False
    For $i = 0 To UBound($aPop) -1
    $aPop[$i] = $aTxt[$i+1]
    Next
    For $i = 1 To UBound($aTxt) -1
    $random = Random(0, UBound($aPop))
    $char = $aPop[$random]
    $aPop[$random] = $aPop[UBound($aPop)-1]
    If UBound($aPop)-1 > 2 Then ReDim $aPop[UBound($aPop)-1]
    If $static = 1 Then GUISetState(@SW_LOCK, $hWnd)
    If $side Then
    $rightChars = $char & $rightChars
    Else
    $tmpLeft &= $char
    $leftChars = _StringRepeat(' ', $spaceCnt) & $tmpLeft
    $spaceCnt -= 1
    EndIf
    ControlSetText($hWnd, '', $Ctrl_ID, $leftChars & $rightChars)
    $side = Not $side
    If $static = 1 Then GUISetState(@SW_UNLOCK, $hWnd)
    Sleep($iDelay)
    Next
    Local $str = ControlGetText($hWnd, '', $Ctrl_ID), $strLen = StringLen($str)
    $spaceCnt = 0
    $leftChars = StringLeft($str, $start)
    $rightChars = StringRight($str, $strLen-$start)
    $side = False
    $i = 0
    Do
    If $side Then
    $rightChars = StringTrimLeft($rightChars, 1)
    Else
    $leftChars = StringTrimRight($leftChars, 1)
    $spaceCnt += 1
    EndIf
    $side = Not $side
    If $static = 1 Then GUISetState(@SW_LOCK, $hWnd)
    ControlSetText($hWnd, '', $Ctrl_ID, _StringRepeat(' ', $spaceCnt) & $leftChars & $rightChars)
    If $static = 1 Then GUISetState(@SW_UNLOCK, $hWnd)
    Sleep($iDelay)
    $i += 1
    Until $i = $strLen
    $tmpLeft = ''
    $leftChars = ''
    $rightChars = ''
    $spaceCnt = $start-1
    $side = False
    Local $leftIndx = 1, $rightIndx = UBound($aTxt)-1
    For $i = 1 To UBound($aTxt) -1
    If $static = 1 Then GUISetState(@SW_LOCK, $hWnd)
    If $side Then
    $rightChars = $aTxt[$rightIndx] & $rightChars
    $rightIndx -= 1
    Else
    $tmpLeft &= $aTxt[$leftIndx]
    $leftChars = _StringRepeat(' ', $spaceCnt) & $tmpLeft
    $spaceCnt -= 1
    $leftIndx += 1
    EndIf
    ControlSetText($hWnd, '', $Ctrl_ID, $leftChars & $rightChars)
    $side = Not $side
    If $static = 1 Then GUISetState(@SW_UNLOCK, $hWnd)
    Sleep($iDelay)
    Next
    EndFunc ;==>_txt_eff__fountain

    [/autoit]

    Dateien

    Effekt_Fountain.au3 3,06 kB – 338 Downloads
  • TextEffects-UDF - Mach mehr aus langweiligem Text (inkl. About-Box)

    • BugFix
    • 2. März 2008 um 14:42

    Ich hab mal einen weiteren Texteffekt erstellt:
    _txt_eff__move_in_from_right_char_by_char($hWnd, $Ctrl_ID, $sText='', $iEffLength=-1, $iCharDelay=-1, $iSlideDelay=-1)
    Hiermit wird der Text von rechts zeichenweise eingefügt, d.h. ein Zeichen bis zum Endpunkt, dann das nächste usw.

    Hier im Vergleich mit der enblock-Einfügefunktion:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <String.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $txt = 'Computer ersparen die Zeit, die wir ohne sie nicht bräuchten ;-)'
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 198, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $label = GUICtrlCreateLabel('Text von rechts, Zeichen für Zeichen (BugFix)', 72, 50, 481, 17)
    $Input1 = GUICtrlCreateInput("", 72, 72, 481, 21)
    GUICtrlSetFont(-1, 9, 400, Default, "Courier New")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    _txt_eff__move_in_from_right_char_by_char($Form1, $Input1, $txt)
    Sleep(2000)
    GUICtrlSetData($Input1, '')
    GUICtrlSetData($label, 'Text von rechts, am Stück (PeeTheBee)')
    _txt_eff__move_in_from_right($Form1, $Input1, $txt)
    Sleep(2000)
    Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Form1Close()
    Exit
    EndFunc
    ;==================================================================================================
    ; $hWnd Fensterhandle
    ; $Ctrl_ID Control-ID
    ; $sText einzufügender Text, wird nichts übergeben bricht die Funktion ab
    ; $iEffLength Startpunkt (Zeichenlänge), von dem die Zeichen eingefügt werden,
    ; wenn nichts angegeben: Länge Zeichenkette
    ; $iCharDelay Verzögerung bis zum Beginn Einfügen nächstes Zeichen
    ; $iSlideDelay Verzögerung während des Eingleitens zwischen den Positionen, außer bei Leerzeichen
    ; erfordert <String.au3>
    ;==================================================================================================
    Func _txt_eff__move_in_from_right_char_by_char($hWnd, $Ctrl_ID, $sText='', $iEffLength=-1, $iCharDelay=-1, $iSlideDelay=-1)
    If $sText = '' Then Return
    If $iCharDelay < 0 Then $iCharDelay = 100
    If $iSlideDelay < 0 Then $iSlideDelay = 10
    Local $static = _IsStatic($hWnd, $Ctrl_ID)
    Local $aTxt = StringSplit($sText, ''), $tmpTxt = ''
    If $iEffLength < 0 Or $iEffLength < $aTxt[0] Then $iEffLength = $aTxt[0]
    For $i = 1 To $aTxt[0]
    For $k = 1 + $i -1 To $iEffLength
    If $static = 1 Then GUISetState(@SW_LOCK, $hWnd)
    ControlSetText($hWnd, '', $Ctrl_ID, $tmpTxt & _StringRepeat(' ', $iEffLength-$k) & $aTxt[$i])
    If $static = 1 Then GUISetState(@SW_UNLOCK, $hWnd)
    If $aTxt[$i] <> ' ' Then Sleep($iSlideDelay)
    Next
    $tmpTxt &= $aTxt[$i]
    Sleep($iCharDelay)
    Next
    EndFunc ;==>_txt_eff__move_in_from_right_char_by_char

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _txt_eff__move_in_from_right($winhandle, $control_id, $text = "", $delay = 100, $text_min_width = 0)
    If $text = "" Then $text = ControlGetText($winhandle, "", $control_id)
    Local $static = _IsStatic($winhandle, $control_id)
    If $text_min_width <> 0 Then
    For $i = StringLen($text) To $text_min_width
    $text = $text & " "
    Next
    EndIf
    For $i = 1 To StringLen($text)
    $out_string = StringLeft($text, $i)
    For $j = $i To StringLen($text) - 1
    $out_string = " " & $out_string
    Next
    If $static = 1 Then GUISetState(@SW_LOCK, $winhandle)
    ControlSetText($winhandle, "", $control_id, $out_string)
    If $static = 1 Then GUISetState(@SW_UNLOCK, $winhandle)
    Sleep($delay)
    Next
    Return 1
    EndFunc ;==>_txt_eff__move_in_from_right

    [/autoit] [autoit][/autoit] [autoit]

    Func _IsStatic($winhandle, $control_id)
    Local $ret = DllCall("user32.dll", "int", "GetClassName", "hwnd", ControlGetHandle($winhandle, "", $control_id), "str", "", "int", 128)
    If StringInStr($ret[2], "Static") <> 0 Then Return 1
    Return 0
    EndFunc ;==>_IsStatic

    [/autoit]

    Dateien

    Effekt_CharByCharFromRight.au3 3,47 kB – 361 Downloads
  • erweiterte Funktionen: Min() und Max()

    • BugFix
    • 1. März 2008 um 22:04

    Hi,
    hier der Grund, weshalb ich _Number() brauchte ;)
    Min() und Max() ermöglichen nur die Rückgabe des kleinsten/größten Wertes von zwei Werten.
    Möchte ich bei mehreren Werten den kleinsten/größten ermitteln, könnte ich sie in ein Array packen und mit entsprechender Arrayfunktion ermitteln.
    Ich hab der Einfachheit halber beide Funktionen so erweitert, dass aus bis zu 20 übergebenen Werten der kleinste/größte zurückgegeben wird.
    Die ersten beiden müssen Zahlenwerte sein (können auch als String vorliegen). Sollten bei den anderen Werten reine Strings enthalten sein, so werden diese ignoriert.

    _MinFromList() / _MaxFromList()
    [autoit]

    MsgBox(0, '', 'Maximum: ' & _MaxFromList(-34,-127,'C','127.1') & @LF & 'Minimum: ' & _MinFromList(34,127,17,127.1,'0',-1.2))

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Name: _MaxFromList($N1, $N2, ..., $N20="")
    ; Return: Erfolg: größter numerischer Wert aus max. 20 Variablen, auch Strings können übergeben werden
    ; Fehler: Leerstring
    ; Fehlerwert: 1 erster Wert nicht numerisch
    ; 2 zweiter Wert nicht numerisch
    ; Erfordert: _Number()
    ;==================================================================================================
    Func _MaxFromList($N1, $N2, $N3="", $N4="", $N5="", $N6="", $N7="", $N8="", $N9="", $N10="", $N11="", $N12="", $N13="", $N14="", $N15="", $N16="", $N17="", $N18="", $N19="", $N20="")
    Local $tmp1 = _Number($N1)
    If @error Then Return SetError(1, 0, '')
    Local $tmp2 = _Number($N2)
    If @error Then Return SetError(2, 0, '')
    Local $max = $tmp1, $num, $i = 2
    For $i = 2 To 20
    $num = _Number(Eval('N' & $i))
    If @error Then ContinueLoop
    If $num > $max Then $max = $num
    Next
    Return $max
    EndFunc ;==>_MaxFromList

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Name: _MinFromList($N1, $N2, ..., $N20="")
    ; Return: Erfolg: kleinster numerischer Wert aus max. 20 Variablen, auch Strings können übergeben werden
    ; Fehler: Leerstring
    ; Fehlerwert: 1 erster Wert nicht numerisch
    ; 2 zweiter Wert nicht numerisch
    ; Erfordert: _Number()
    ;==================================================================================================
    Func _MinFromList($N1, $N2, $N3="", $N4="", $N5="", $N6="", $N7="", $N8="", $N9="", $N10="", $N11="", $N12="", $N13="", $N14="", $N15="", $N16="", $N17="", $N18="", $N19="", $N20="")
    Local $tmp1 = _Number($N1)
    If @error Then Return SetError(1, 0, '')
    Local $tmp2 = _Number($N2)
    If @error Then Return SetError(2, 0, '')
    Local $min = $tmp1, $num, $i = 2
    For $i = 2 To 20
    $num = _Number(Eval('N' & $i))
    If @error Then ContinueLoop
    If $num < $min Then $min = $num
    Next
    Return $min
    EndFunc ;==>_MinFromList

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Number($Expression)
    If StringRegExp($Expression, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    Return Number($Expression)
    Else
    Return SetError(1, 0, '')
    EndIf
    EndFunc ;==>_Number

    [/autoit]

    Dateien

    min_max_new.au3 2,33 kB – 365 Downloads
  • Fehlerhafte Rückgabe der Funktion Number() behoben mit _Number()

    • BugFix
    • 1. März 2008 um 21:29

    GtaSpider : JEIN :P, wenn schon gleiche Funktionalität, dann ..StringIsDigit Or StringIsFloat Or StringIsInt...

    @TrueMu:
    :D also dieser Ausdruck ist eigentlich recht überschaubar. Ich erklär es mal:

    Code
    \A         = Ankerpunkt Start (alle Matches zwischen Start und Ende müssen EIN String sein)
    [-+]{0,1}  = Zeichenklasse bestehend aus + und - , + oder - können 0- oder1-mal auftreten
    \d+        = Zeichen 0 bis 9,  MUSS einmal, kann beliebig oft auftreten
    \.{0,1}    = Punkt (Dezimaltrennzeichen), kann 0- oder1-mal auftreten
    \d*        = Zeichen 0 bis 9,  MUSS NICHT, kann beliebig oft auftreten
    \z         = Ankerpunkt Ende
  • Fehlerhafte Rückgabe der Funktion Number() behoben mit _Number()

    • BugFix
    • 1. März 2008 um 20:52

    Number() weist eine "Fehlfunktion" auf. Folgendes Szenario:
    Zahlenwerte liegen in Variablen im Stringformat vor. Ich möchte nur die Variablen verarbeiten, die auch Zahlenwerte sind.
    Dazu habe ich ja die Möglichkeit den String in eine Zahl zu konvertieren mit Number(). Das führt aber zu dem unkontrollierten Zustand, dass alle Nichtzahlenwerte als 0 zurückgegeben werden.
    Bsp:
    $ret = Number('0')     ; Rückgabe 0
    $ret = Number('Z')     ; Rückgabe 0 aber keinen Fehler
    ==> keine Unterscheidung zwischen beiden Ergebnissen möglich !


    Mit IsNumber() kann ich keine Überprüfung durchführen, vor Anwendung von Number() gibt IsNumber() natürlich "False" zurück,
    danach aber IMMER "True", weil Number() im Fall des Nichterfolges eine 0 zurückgibt und bei Erfolg natürlich den Zahlenwert.

    Deshalb hier meine Funktion _Number(), die diesen Missstand beseitigt.
    Ich überprüfe mit einem Regulären Ausdruck ob die Zeichenkette mit einem nicht-numerischen Zeichen beginnt. Falls JA, wird einen Leerstring zurückgegeben und @Error auf 1 gesetzt. (Number() würde 0 zurückgeben)

    EDIT 2018-06-22:

    Nach 10 Jahren sieht man auch an so einer kleinen Funktion noch Verbesserungspotential.

    Ich habe die Funktion mal etwas vereinfacht und erweitert, sodass sie exakt wie Number() arbeitet (inkl. der möglichen Flags) und nur bei Übergabe eines Ausdrucks der ein String ist oder mit einem String beginnt einen Leerstring zurückgibt und @error setzt.

    _Number()
    AutoIt
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _Number
    ; Description ...: Works like "Number()", but avoids to convert a string to number 0!
    ; Syntax ........: _Number($_Expression, $_Flag)
    ; Parameters ....: $_Expression    - An expression to convert into a number.
    ; ...............: $_Flag          - Can be one of the following:
    ; ...............:                   $NUMBER_AUTO (0) = (default) the result is auto-sized integer.
    ; ...............:                   $NUMBER_32BIT (1) = the result is 32bit integer.
    ; ...............:                   $NUMBER_64BIT (2) = the result is 64bit integer.
    ; ...............:                   $NUMBER_DOUBLE (3) = the result is double.
    ; Return values .: Success           The converted number, if $_Expression is a number or starts with a number.
    ; ...............: Failure           Empty string, sets @error = 1   $_Expression is a string or starts with a string.
    ; Author ........: BugFix
    ; Remarks .......: In contrast to Number(), you get only a number, if $_Expression is a number or starts with it.
    ; ...............: Because 0 is also a number, Number() give unclear results:
    ; ...............: Number("foo") returns 0. Number("0") returns also 0. "0" converts to the real number 0, but "foo" also??
    ; ===============================================================================================================================
    Func _Number($_Expression, $_Flag=0)
        If StringRegExp($_Expression, '\A(\D+)') Then
            Return SetError(1, 0, '')
        Else
            Return Number($_Expression, $_Flag)
        EndIf
    EndFunc   ;==>_Number
    Alles anzeigen

    DL bisher: 158

    Dateien

    _Number[0.1].au3 1,75 kB – 249 Downloads
  • DOS-Fenster Inhalt auslesen

    • BugFix
    • 28. Februar 2008 um 21:59

    Sieht so aus, als ob: #include <Constants.au3> fehlt.

  • Problem mit

    • BugFix
    • 27. Februar 2008 um 14:57

    Ändere mal die Zeilen 23 & 24 so:

    [autoit]


    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($Formeln))
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($MathFormel))

    [/autoit]


    Dann sollte es funzen ;)

  • Userpics von euch :)

    • BugFix
    • 27. Februar 2008 um 13:45
    Zitat von Xeno

    Bin eigentlich der einzige Ü20 im Forum der NOCH *teu teu teu* keine Brille braucht?


    Ich hab auch noch immer anerkannte 120% Sehkraft. (mehr als alles :D)
    Auf 5 m Abstand muß man alle Zeichen sehen können, dann sinds 100% - Ich seh auch alles bei 6 m ==> 120 % :rofl:

  • So etwas wie Filereadline auch mit guictrlcreateinput oder list?

    • BugFix
    • 27. Februar 2008 um 13:00

    Einfach mal in die Hilfe zu den Befehlen gucken, das erklärt einiges ;)
    StringSplit() gibt ein Array zurück!

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™