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. Oscar

Beiträge von Oscar

  • Wie ändert man die Menüleiste der Gui zur Laufzeit

    • Oscar
    • 30. September 2008 um 20:16

    Schau Dir mal _GUICtrlMenu_DeleteMenu in der Hilfe an.

  • Dateiauswahl & öffnen per GUI

    • Oscar
    • 30. September 2008 um 19:40

    @Arioch: Dein $lastmon funktioniert nicht, wenn der aktuelle Monat "Januar" ist!

    Nimm lieber diese kürzere Variante für Deine Monatsnamen:

    [autoit]


    Global $aMonth[13] = [12, 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
    Global $ThisMonth = $aMonth[@MON]
    Global $LastMonth = $aMonth[(@MON - 1) + (@MON - 1 = 0) * 12]
    MsgBox(0, 0, $ThisMonth & @CRLF & $LastMonth)

    [/autoit]
  • _MultiFileCopy

    • Oscar
    • 30. September 2008 um 19:14

    @Tom99: Ich habe die Änderungen bezüglich der lokalen Variablen jetzt mal übernommen. Außerdem habe ich noch ein wenig Kosmetik (Anzeige der Dateinamen optimiert) betrieben.

    Jetzt finde ich die Funktion echt klasse!

    Vielen Dank euch beiden (Tom99 und progandy)! :thumbup:

  • Viele Fragen zu CopyHere

    • Oscar
    • 30. September 2008 um 04:42

    Was gefällt Dir denn an MultiFileCopy nicht? :)

  • _MultiFileCopy

    • Oscar
    • 28. September 2008 um 13:07

    @progandy: Ich habe das jetzt dahingehend geändert, dass Array[0] die Anzahl der zu kopierenden Dateien enthalten muss (siehe Post #1).

    @satinez: schau Dir das Beispiel in der neuen Version an. Dort wird _FileListToArray benutzt.
    Willst Du hingegen Dateien von unterschiedlichen Pfaden kopieren, musst Du die "von Hand" ins Array packen:

    [autoit]

    Global $aSourceFiles[4] = [3, 'c:\bla.gif', 'd:\blub\blablub.jpg', 'e:\bli\bla.zip']

    [/autoit]
  • µit - September

    • Oscar
    • 28. September 2008 um 12:09

    eukalyptus: Naja, ich fand den Trick eigentlich nicht so bedeutend. Die maximale Stellenzahl bei der Addition mit "64 Bit Signed Int" halt. Bei der Multiplikation entsprechend 9 Stellen.

    Aber kommen wir zur Erklärung meiner Funktionen.
    Bei _BigInt_Add wird zunächst festgestellt welche der beiden Zahlen größer ist und ggf. in einem Ringtausch ausgetauscht, um diese dann für die For...Next-Schleife zu verwenden. Anschließend werden beide Zahlen in 18stellige "Häppchen" aufgeteilt, die dann jeweils addiert werden. Der Übertrag wird bei der nächsten Addition dazuaddiert. Das ist wohl soweit verständlich (hoffe ich).


    Bei _BigInt_Mul wird es etwas komplizierter, weil ich von der "Schulmethode" doch etwas abweiche. Zunächst werden die beiden Zahlen in 9stellige "Häppchen" aufgeteilt. Wobei das Ganze von Rechts nach Links vor sich geht. Das heißt, Array[0] enthält eine variable Anzahl an Stellen mit 1...9 Stellen. Alle anderen Array-Elemente sind 9stellig. Im Nachfolgenden nenne ich sie mal Blöcke. Zur besseren Unterscheidung der beiden Zahlen verwende ich außerdem zwei verschiedene Farben (ich hoffe dadurch wird das verständlicher).

    Dann gehe ich so vor, dass der letzte 9er-Block der zweiten Zahl mit dem letzten 9er-Block der ersten Zahl multipliziert wird. Vom Ergebnis dieser Multiplikation werden die letzten 9 Stellen in eine temporäre Stringvariable abgelegt, die vorderen Stellen gehen als Übertrag in die nächste Multiplikation ein. Es folgt die Multiplikation des letzten 9er-Blocks der zweiten Zahl mit dem vorletzten 9er-Block der ersten Zahl. Der temporären Stringvariablen werden wieder die letzen 9 Stellen der Multiplikation hinzugefügt, allerdings werden diese immer links hinzugefügt also nicht einfach angehängt. So geht es weiter bis der letzte 9er-Block der zweiten Zahl mit allen Blöcken der ersten Zahl multipliziert wurde.

    Die temporäre Stringvariable entspricht nun dem Multiplikationsergebnis der gesamten ersten Zahl mit dem letzten Block der zweiten Zahl. Dieses "Zwischenergebnis" addiere ich nun, mit Hilfe von _BigIntAdd, zu der Ausgabevariable dazu.
    Anschließend geht es mit dem vorletzten Block der zweiten Zahl weiter. Dieser wird ebenfalls mit allen Blöcken der ersten Zahl multipliziert, es wird wieder eine temporäre Stringvariable erstellt und diese wird wieder der Ausgabevariablen hinzuaddiert. Allerdings werden der temporären Stringvariablen vorher noch 9 Nullen angehängt, sodass das Zwischenergebnis weiter eingerückt wird (Stellenwertigkeit).
    Das geht dann so weiter, bis schließlich der erste Block der zweiten Zahl mit allen Blöcken der ersten Zahl multipliziert wurde.

    Ich muss feststellen, dass es beinahe schwerer ist, das zu erklären als es zu programmieren. ;)

  • _MultiFileCopy

    • Oscar
    • 28. September 2008 um 09:32

    Du kannst auch ganze Verzeichnisbäume kopieren. Musst lediglich den Verzeichnisbaum in ein Array einlesen und der Funktion übergeben.

    @progandy: Habe Deinen Tip mit dem globalen Array umgesetzt (siehe Post #1). Danke! :)

  • Kann mir bitte einer ein Skript erstellen?

    • Oscar
    • 27. September 2008 um 22:48

    Mit _Timer_SetTimer() könnte man das auch realisieren.

    P.S.: Kann ich statt dem Mandeltörtchen auch ein paar Waffeln mit Erdbeermarmelade bekommen? :D

  • µit - September

    • Oscar
    • 27. September 2008 um 22:33

    Meine beiden Scripte:

    Size:

    Spoiler anzeigen
    [autoit]


    #include-once
    Func _BigInt_Add($a,$b)
    Local $p=StringSplit($a&'0',''),$q=StringSplit($b&'0',''),$t=$p,$c=0,$o
    If $p[0]<$q[0] Then
    $p=$q
    $q=$t
    EndIf
    For $i=1 To $p[0]-1
    $t=Int($p[$p[0]-$i])+Int($q[$q[0]-$i*($i<$q[0])])+$c
    $c=Int(0+StringTrimRight($t,1))
    $o=StringRight($t,1)&$o
    Next
    If Int($c) Then $o=$c&$o
    Return $o
    EndFunc
    Func _BigInt_Mul($a,$b)
    Local $o,$t,$p=StringSplit($a,''),$q=StringSplit($b,''),$j=$q[0]
    Do
    $k=$p[0]
    Do
    $t=Int($p[$k])*Int($q[$j])
    For $l=1 To $p[0]-$k+$q[0]-$j
    $t&='0'
    Next
    $o=_BigInt_Add($o,$t)
    $k-=1
    Until $k<1
    $j-=1
    Until $j<1
    Return StringRegExpReplace($o,'(\A0+)(.+)','$2')
    EndFunc
    Func _BigInt_Load($a)
    Return $a
    EndFunc
    Func _BigInt_Print($a)
    Return $a
    EndFunc

    [/autoit]

    Speed:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include-once
    Func _BigInt_Add($sAdd1, $sAdd2)
    Local $sOut, $sTemp, $iCarry = 0
    If StringLen($sAdd1) < StringLen($sAdd2) Then
    $sTemp = $sAdd1
    $sAdd1 = $sAdd2
    $sAdd2 = $sTemp
    EndIf
    Local $aAdd1 = StringRegExp($sAdd1, '\A\d{' & Mod(StringLen($sAdd1), 18) & '}|\d{18}+', 3), $iCountAdd1 = UBound($aAdd1) - 1
    Local $aAdd2 = StringRegExp($sAdd2, '\A\d{' & Mod(StringLen($sAdd2), 18) & '}|\d{18}+', 3), $iCountAdd2 = UBound($aAdd2) - 1
    For $i = 0 To $iCountAdd1
    If $i <= $iCountAdd2 Then
    $sTemp = Int($aAdd1[$iCountAdd1 - $i]) + Int($aAdd2[$iCountAdd2 - $i]) + $iCarry
    Else
    $sTemp = Int($aAdd1[$iCountAdd1 - $i]) + $iCarry
    EndIf
    $iCarry = Int(0 + StringTrimRight($sTemp, 18))
    $sOut = StringRight('000000000000000000' & $sTemp, 18) & $sOut
    Next
    Return StringRegExpReplace($sOut, '(\A0+)(\d+)', '$2')
    EndFunc

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

    Func _BigInt_Mul($sTerm1, $sTerm2)
    Local $aTerm1 = StringRegExp($sTerm1, '\A\d{' & Mod(StringLen($sTerm1), 9) & '}|\d{9}+', 3), $iCountTerm1 = UBound($aTerm1) - 1
    Local $aTerm2 = StringRegExp($sTerm2, '\A\d{' & Mod(StringLen($sTerm2), 9) & '}|\d{9}+', 3), $iCountTerm2 = UBound($aTerm2) - 1
    Local $sOut, $sTemp, $iCarry = 0, $sRow, $sPad
    For $j = $iCountTerm2 To 0 Step -1
    For $k = $iCountTerm1 To 0 Step -1
    $sTemp = Int($aTerm1[$k]) * Int($aTerm2[$j]) + $iCarry
    $iCarry = Int(0 + StringTrimRight($sTemp, 9))
    If $k > 0 Then $sTemp = StringRight('000000000' & $sTemp, 9)
    $sRow = $sTemp & $sRow
    Next
    $sOut = _BigInt_Add($sOut, $sRow & $sPad)
    $sPad &= '000000000'
    $sRow = ''
    $iCarry = 0
    Next
    Return $sOut
    EndFunc

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

    Func _BigInt_Load($a)
    Return $a
    EndFunc

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

    Func _BigInt_Print($a)
    Return $a
    EndFunc

    [/autoit]
  • Terme berechnen

    • Oscar
    • 27. September 2008 um 04:35

    Ja, genau das ist das Komplizierte daran. Wie die anderen bereits gepostet haben, besteht die eigentliche Aufgabe bei diesem Script in genau diesem Teil. Wie kann man das lösen, sodass es für jede Aufgabe passt?
    Erstmal musst Du wohl rauskriegen, auf welcher Seite "X" steht. Deswegen habe ich das in den RegExp-Pattern schon mit eingebaut. Aber für den Rest fällt mir auch keine brauchbare Lösung ein...

  • AutoIT und Bluetooth

    • Oscar
    • 26. September 2008 um 21:24

    Ok, Du hast Recht! Ich habe das eben mit meinem Handy getestet. Klappt nicht!
    Selbst wenn man eine Verbindung herstellt und diese bestehen lässt, wird der Online-Status nirgends angezeigt. :huh:

  • Terme berechnen

    • Oscar
    • 26. September 2008 um 21:01

    Eine komplette Aufgabe zerlegen:

    [autoit]


    #include<Array.au3>
    $a = StringStripWS('5 + x - 10 + 8 = 20 + 5', 8)
    $b = StringSplit($a, '=')
    If IsArray($b) Then
    $c1 = StringRegExp($b[1], '(\+\d+|-\d+|\*\d+|/\d+|(?i)\D*x|(?i)\D*y|\d+)', 3)
    $c2 = StringRegExp($b[2], '(\+\d+|-\d+|\*\d+|/\d+|(?i)\D*x|(?i)\D*y|\d+)', 3)
    EndIf
    _ArrayDisplay($c1)
    _ArrayDisplay($c2)

    [/autoit]
  • Terme berechnen

    • Oscar
    • 26. September 2008 um 19:52

    Einfach _ArrayReverse($b) vor _ArrayDisplay($b) setzen. Oder meinst Du das anders?

  • AutoIT und Bluetooth

    • Oscar
    • 26. September 2008 um 19:40
    Zitat von funkey

    Einen Sinn macht, das für mich schon. Wäre ein nettes Info-Tool. Ich würde es allerdings so einsetzen (wie ich es von Linux her schon kenne) , wenn z.B. mein Handy außer Reichweite ist, dass sich die Station von selbst sperrt.
    Auch wäre es nicht uninteressant, wenn ich informiert würde, wenn ein neues Bluetooth-Gerät vorhanden ist, ohne explizit danach zu suchen. So ähnlich wie bei Infrarot, da meldet der PC sofort, dass er Verbindung mit einem anderen PC hat.

    Ich habe hier ein Bluetooth-Headset und sobald ich das einschalte, wird es automatisch angemeldet. Ich denke, das sollte mit einem Handy auch funktionieren. Dann bräuchte man nur noch testen, ob das Handy angemeldet ist und könnte so den Rechner sperren. Das sollte einfacher sein, als sich mit irgendwelchen Dll's rumzuschlagen.

  • Terme berechnen

    • Oscar
    • 26. September 2008 um 19:22

    Mit StringRegExp kannst Du einen solchen Term zerlegen:

    [autoit]


    #include<Array.au3>
    $a = '-4587x +5766 -777 *88888 /111'
    $b = StringRegExp($a, '(\+\d+|-\d+|\*\d+|/\d+)', 3)
    _ArrayDisplay($b)

    [/autoit]
  • Bilder Problem

    • Oscar
    • 26. September 2008 um 19:10

    Etwas ausführlicher: Du erstellst mit GUICtrlCreatePic einmalig ein Bild und anschließend änderst Du nur noch den Bildinhalt mit GUICtrlSetImage.

  • Fortschrittsanzeige für Scriptinterne Funktionen

    • Oscar
    • 26. September 2008 um 19:04

    So war das jetzt auch nicht gemeint. Du musst innerhalb Deiner Verschlüsselungsfunktion den Fortschritts-Prozentwert errechnen und den dann per GUICtrlSetData($progress, $prozent) anzeigen lassen.

  • AutoIT und Bluetooth

    • Oscar
    • 26. September 2008 um 14:59

    Ich verstehe nicht den Sinn dahinter. Wenn Du einen Bluetooth-Stick hast, dann hast Du doch auch eine Bluetooth-Umgebung auf dem Desktop, wo Dir alle Geräte angezeigt werden und wo Du Dich mit den Geräten verbinden kannst.
    Das ist jedenfalls bei mir so und auch bei allen die ich kenne (mit Bluetooth).

  • Fortschrittsanzeige für Scriptinterne Funktionen

    • Oscar
    • 25. September 2008 um 18:35

    Du könntest auch die Funktion _StringEncrypt aus der UDF (String.au3) rauskopieren und in Deinem eigenen Script verwenden. Dann kannst Du dort eine Progressfunktion einbauen. Allerdings wird StringEncrypt dann noch langsamer.
    Das gilt genauso für alle anderen Funktionen der UDFs. Bei den internen Funktionen sehe ich da allerdings keine Möglichkeit.

  • Rappelz HP aus Memory auslesen

    • Oscar
    • 24. September 2008 um 17:35

    Bitte Forenregeln beachten!

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™