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

Beiträge von Mars

  • Fehler oder normal?

    • Mars
    • 30. August 2014 um 00:27

    GuiSetState setzt man nur ohne Parameter ein, wenn man irgendwelche Wettbewerbe bestreiten will und die 5 Bytes einsparen will.

  • Halbdynamisches Array - verbessert die Performance von Größenänderungen erheblich

    • Mars
    • 26. August 2014 um 19:55
    Zitat von BugFix

    Eine automatische Erkennung, welches Array denn gerade übergeben wird, kann man ja auch nicht ohne Verrenkungen realisieren. Das erfordert dann irgendeine Form der Registrierung/ID-Vergabe. Stimmt schon - optimal geht anders.. ;)

    Und wiedereinmal stoßen wir an diese Grenze. Wie oft sind wir in den letzten 2 Wochen denn hier gelandet ?
    - Funktionen die "wissen" welche Variablen in den Parametern stecken
    - Funktionen die "wissen" von welcher Variable sie aufgerufen wurden
    - Die Unterscheidung mehrer Variablen ohne den Inhalt zu beeinflussen, usw usw.

    Gerade für Arrays gibts doch intern irgendwelche IDs. Man kann ja 2 identische Arrays mal mit "=" vergleichen und wird feststellen dass irgendein Pointer oä verglichen wird und nicht der Inhalt.

  • _ArrayToStringEx

    • Mars
    • 21. August 2014 um 02:04

    Moin,

    Wer schonmal die Standardversion von _ArrayToString benutzt hat weiß, dass diese Funktion extrem schnell an ihre Grenzen stößt.
    Eine vollständige Rekonstruktion eines Arrays ist nur möglich, wenn das komplette Array ausschließlich Strings enthält die jeweils NICHT den Seperator enthalten. Im Prinzip also ein Spezialfall eines Spezialfalls einer allgemeinen Anwendung.

    Was kann ArrayToStringEx ?
    Es kann genau das was der Name vermuten lässt, es verwandelt ein (relativ) beliebiges Array in einen String. Mit der Umkehrfunktion _StringToArrayEx lässt sich dieses Array wieder vollständig aus dem String rekonstruieren. Dabei werden fast alle in AutoIt möglichen Datentypen ebenfalls wiederhergestellt.

    Sie kann ein 1D oder 2D Array vollständig in einen String umwandeln. Der String liegt als Base256 vor, falls man ihn "ansehen" will sollte man also ein StringToBinary zwischenschalten.
    Unterstützt wird fast alles, daher zähle ich die Sachen auf die nicht unterstützt werden:

    • Arrays mit einer Dimension höher als 2 (also 3D, 4D, usw)
    • Der Map Variablentyp (der wird noch nachgeliefert, sobald Maps in der Stable vertreten sind und ich genug Lust habe weiterzubasteln)
    • DllStructs (Es gibt das Problem, dass der interne Aufbau einer Struct im nachhinein nicht mehr ermittelt werden kann. Eine Struct lässt sich z.B. assoziativ herrichten, sodass man zur Rekonstruktion einer Struct den vollständigen String benötigt der DllStructCreate übergeben wurde)
    • Objekte (Sind von Natur aus nicht Zeitunabhängig und beinhalten Verzweigungen im RAM die nicht "allgemein" erfassbar sind. Daher ist es unmöglich Objekte zu "speichern")

    Edit: 16.Aug.15 (AutoIt 3.3.12.0)
    Es gibt einige kleine Erneuerungen.

    • Neuer unterstützer Datentyp: "Datei" -> Es können nun auch Dateien (via Dateiname in einem Array) mittels ArrayToStringEx in einen String gepackt werden. Im Ergebnis von StringToArrayEx ist dann allerdings der Dateiinhalt, es werden also keine neuen Dateien angelegt. Damit lässt sich ArrayToString auch als Containerformat für Dateien verwenden.
    • Neuer unterstützer Datentyp: "GDIPlus Bitmap" -> Klingt komisch, ist aber so. Man kann jetzt z.B. ein Array aus GDI+ Bitmaps/Images als String speichern und später wieder laden. Damit lässt sich ArrayToString auch als Containerformat für viele (kleine) GDI+ Bilder nutzen.
    • Das Zu- und Abschalten dieser Möglichkeiten wird mit _ArrayToStringOpt vorgenommen (hier werden in Zukunft ggf. noch weitere Einstellungsmöglichkeiten folgen).

    Edit: 07.Feb.23 (AutoIt 3.3.16.1)

    Bugfixes.

    • Das Speicher von GDI+ Bildern hat (vermutlich seit einigen Jahren) nicht mehr funktioniert, da irgendwo irgendetwas bei FileRead, oder der Handhabung vom Binary Datentyp geändert wurde.
    • UserFunction hat als Datentyp nicht funktioniert.
    • AspirinJunkie hat eine standadisierte Methode verwendet die dasselbe kann (aber vermutlich besser ist) angewendet um eine UDF zu schreiben. Außerdem wird der Map Datentyp unterstützt (weshalb ich das hier nicht hinzufüge, Sachen mehrfach zu machen bringt ja nichts). CBOR-UDF

    Die Funktion ist ausdrücklich NICHT auf geringe Stringgröße optimiert, der Output besitzt idr eine hohe Redundanz und Komprimierbarkeit. (Hier könnte man die in UEZ' B64-Skript verwendete LZ-Funktion benutzen)
    Falls Fehler, Anregungen, Vorschläge auftauchen, so lasst es mich wissen  ;)

    lg
    M

    Dateien

    ArrayToStringEx (07.Feb.23).zip 6,18 kB – 237 Downloads ArrayToStringEx (16.Aug.15).zip 5,97 kB – 480 Downloads ArrayToStringEx.au3 12,94 kB – 552 Downloads Test.au3 1,91 kB – 480 Downloads
  • ich kannte früher Tools, die alle Eigenschaften und Controls eines Windows Objekts übersichtlich zeigen konnten

    • Mars
    • 14. August 2014 um 21:22

    Dem Editierkommentar (gibt es diese Wort überhaupt) entnehme ich, dass das Problem damit gegessen ist. (Ist selten, dass jemand die Kommentarfunktion in dieser Weise nutzt :D)
    Wenn ein Thema abgehandelt ist bitte den Statrpost Editieren und den Tag auf [gelöst] stellen.

    lg
    M

  • [spiel] Wünsch dir was !

    • Mars
    • 13. August 2014 um 17:57

    Leider wird der Staat von den USA nicht anerkannt und ausgebombt.

    Ich wünsche mir einen heißen Kaffee !

  • [spiel] Wünsch dir was !

    • Mars
    • 13. August 2014 um 17:27

    Bekommst du, leider ist das schlechte Wetter gerade bei mir zu Hause, sodass ich nicht rausgehen kann :(

    Ich wünsche mir eine Erklärung für die rege Teilnahme in diesem Thread, obwohl der Postcounter als virtueller Schwanzvergleich seit einiger Zeit nicht mehr unter dem Profilbild angezeigt wird.

  • cdm, ein "Oldy" ist nun auch dabei!

    • Mars
    • 12. August 2014 um 14:22

    Moin,
    Du darfst selbstverständlich alle Kriterien erörtern, die meisten Personen hier sind Lernfähig und Lernwillig.
    Eine IDE mit etwas mehr Schnickschnack gibt es unter dem Namen ISN-AutoIt Studio. (Auch wenn ich glaube dass du die spartanische Aufmachung von SciTE bevorzugst)

    Apropos sauberer Code:

    [autoit]

    #forcedef $6
    ConsoleWrite('log(x^2) = 1/x -> x = ' & n('log(x^2)', '1/x') & @CRLF)
    Func n($0,$1,$2=1,$3=Assign,$4=StringReplace) ; Newton verfahren
    Return IsString($1)?n($0&'-('&$1&')',0,$2):0*$3(6,Execute($4($0,'x',$2)))*$3(2,$2-$6/(Execute($4($0,'x',$2+1/10^9))-$6)/10^9)+$1=999?$2:n($0,$1+1,$2)
    EndFunc

    [/autoit]


    lg
    M

  • Performance-Analyse der neuen Datenstruktur "Map"

    • Mars
    • 10. August 2014 um 17:19

    Es fehlen noch 2 wirklich simple Sachen, damit man richtige "Objekte" damit erzeugen kann.
    1. Der Aufruf von minx mit $a.methode('s') muss funktionieren
    2. Im Aufruf muss eine $self (oä) Variable bestehen die ByRef auf die Map wirken kann.

    Spoiler anzeigen
    [autoit]


    Global $self

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

    Test()

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

    Func Test()

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

    Local $Ball1 = Ball(100, 100, 50)
    Local $Ball2 = Ball(200, 200, 100)

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

    $self = $Ball1 ; Das hier muss weg -> Der Funktionsaufruf braucht eine Referenz zur aufrufenden Map
    ConsoleWrite('Ball1: ' & Call($Ball1.GetPos)[0] & ',' & Call($Ball1.GetPos)[1] & @CRLF)
    $self = $Ball2
    ConsoleWrite('Ball2: ' & Call($Ball2.GetPos)[0] & ',' & Call($Ball2.GetPos)[1] & @CRLF)

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

    $self = $Ball1
    Call($Ball1.Move, 10, 10) ; Die dummen Calls sollte man eigentlich garnicht brauchen, IsFunc gibt 1 zurück !
    ConsoleWrite('Ball1: ' & Call($Ball1.GetPos)[0] & ',' & Call($Ball1.GetPos)[1] & @CRLF)

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

    $self = $Ball2
    Call($Ball2.Move, 1000, 1000, 200)
    ConsoleWrite('Ball2: ' & Call($Ball2.GetPos)[0] & ',' & Call($Ball2.GetPos)[1] & @CRLF)

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

    EndFunc

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

    Func Ball($mx, $my, $d)

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

    ; Konstruktor
    Local $Ball[]
    $Ball.X = $mx
    $Ball.Y = $my
    $Ball.D = $d

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

    ; Methoden
    $Ball.Move = __BallSetPos
    $Ball.GetPos = __BallGetPos

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

    Return $Ball

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

    EndFunc

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

    Func __BallGetPos()
    Local $a[] = [$self.X, $self.Y]
    Return $a
    EndFunc

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

    Func __BallSetPos($mx, $my, $d = 0)
    $self.X = $mx
    $self.Y = $my
    If $d Then $self.D = $d
    EndFunc

    [/autoit]


    Das $self Problem lässt sich leider nicht so einfach (auch nicht mit Workarounds) umgehen, da die Funktion keinerlei Information besitzt von wo sie aufgerufen wurde.

  • Nächstes Tutorial Thema?

    • Mars
    • 5. August 2014 um 16:45

    Ich bin für 1.

    zu 2: 3D Engines gibt es schon einige und die wahrscheinlichkeit dass im Zuge einer Ausarbeitung eine (für AutoIt) bessere Engine als D3D oder Irrlicht oder GL entsteht ist eher gering. Im Endeffekt ist es sinnvoller sich in eine bestehende Engine einzuarbeiten als eine neue zu schreiben.

    zu 3: Prozedurale Grafiken sind eine schöne Sache. Da ich mich damit aber selbst schon ausgiebig beschäftigt habe und sie bereits an einigen Stellen nutze brauche ich hier kein Tutorial. Zudem wird es wenn es um CPU/GPU geht kaum noch was mit AutoIt zu tun haben.

    zu 1: Hierzu habe ich beim Studium schon eine kleine Ausarbeitung machen müssen (iiiiih, Java) und 100/100 kassiert. Das Thema ansich ist meiner Meinung nach interessant und ggf für KIs, Bilderkennung, allgemeine Optimierungen nutzbar.

    Ich freue mich jedenfalls auf ein Tutorial für Fortgeschrittene, egal zu welchem Thema :)

  • ContainerUDF

    • Mars
    • 2. August 2014 um 17:55

    Das mit dem aktuell bleiben ist zurzeit so ne Sache. Viele User wollen nicht updaten, da einige Funktionen oder Konstanten jetzt andere Namen haben. Dadurch werden die meisten "großen" Skripte instabil oder funktionieren garnicht mehr. Ich habe mir aber die Mühe gemacht und etliche Male die blöde (aber richtigere) Bitmapstruct ersetzt, oder die unnötige Umbenennung der GDI+ Dllvariable berücksichtigt usw usw.
    Ich mache niemandem einen Vorwurf, allerdings werde ich immer (halbwegs) aktuell bleiben (meistens kompatibel mit der letzten "Stable").

  • ContainerUDF

    • Mars
    • 2. August 2014 um 17:13

    Ich nutze die Stable 3.3.12.0.

    Problem 1: Ternärer Operator

    [autoit]

    ; Alt
    If [Ausdruck1] Then
    $a = [Ausdruck2]
    Else
    $a = [Ausdruck3]
    EndIf
    ; Neu
    $a = [Ausdruck1] ? [Ausdruck2] : [Ausdruck3]

    [/autoit]


    Problem 2: Implizite Arraydeklaration

    [autoit]

    ; Alt
    Local $a[3] = [1, 2, 3]
    ; Neu
    Local $a = [1, 2, 3]

    [/autoit]


    lg
    M

  • ContainerUDF

    • Mars
    • 2. August 2014 um 15:26

    Moin,

    Mithilfe der UDF lassen sich Datensätze in einen String verpacken und anschließend wieder entpacken. (klingt jetzt nicht so überragend, kann aber vieles vereinfachen)

    Es kann ein Container (in dem Fall ein einfaches Array) erzeugt werden.
    Diesem Container können Datensätze, bestehend aus Daten|Index|Beschreibung, hinzugefügt werden
    Anschließend kann man den Container in einen String verwandeln und diesen z.B. als Datei speichern.
    Die Daten dürfen nicht vom Typ DllStruct sein, da diese nicht vollständig rekonstruierbar sind. (Man kann zwar die Größe in Erfahrung bringen, aber nicht den Aufbau).

    Anwendungsbeispiele:
    Ein Skript enthält einige Bilder, Sounds, usw. Man kann all diese Inhalte in einen Container stecken und z.B. mit 'Pic01' oder 'Snd01' durchnummerieren. In der Beschreibung steht dann ggf eine spezifischere Definition. Den damit erzeugten String kann man einfach in eine Datei schreiben, und die Daten dem Skript somit austauschbar zur Verfügung stellen.
    Für kleine Spiele kann man damit auch Savegames in einer Datei speichern (ein Savegame besteht aus einer Vielzahl verschiedener Daten die man am besten in einer einzigen Datei verstaut).
    uvm.

    Selbstverständlich kann man für alles was die UDF bietet auch die Ini-Funktionen benutzen. Als Index dient hier der Key, und via Key lässt sich der Datensatz ermitteln der z.B. ein B64 Bild enthalten kann.
    Ich habe darauf geachtet, dass der Container unabhängig vom Inhalt (bei Strings) funktionieren sollte (dafür gibts aber keine Garantie), sodass z.B. eine B64 Umrechnung nicht mehr notwendig ist.

    lg
    M

    Dateien

    Container.zip 4,44 kB – 372 Downloads
  • Newton-Verfahren

    • Mars
    • 29. Juli 2014 um 14:28

    ;( Und dafür habe ich extra ne halbe Stunde das Deutsche Forum durchsucht... ;(
    Vielen Dank für die Info :)

  • Newton-Verfahren

    • Mars
    • 29. Juli 2014 um 14:07

    Minx und ich hatten das gleiche Verfahren irgendwann in der Vergangenheit mal auf einige wenige Bytes heruntergebrochen.
    Leider finde ich diese Version nicht mehr. Im Forum liegt sie garantiert irgendwo...

  • Funktionsplotter - Funktionen ganz einfach darstellen

    • Mars
    • 29. Juli 2014 um 04:50

    Der folgende Vorschlag ist ausdrücklich unoptimiert.
    (Geschwindigkeitsfaktor >10 ist locker drin. Vorallem beim ArrayAdd (da jedes Mal ReDim genutzt wird))

    Er soll nur eine einfache Möglichkeit aufzeigen:
    Vorher
    - 10 Rechtecke/Pixel (warum so viele ?)
    - Einfache Linie ohne Effekte (Einfluss höchstens Farblich möglich)
    - Stufen in der Linie

    Nachher
    - 1 Punkt/Pixel (man kann auch weniger nehmen, aber die Geschwindigkeit reicht locker aus um diese Genauigkeit zu bieten)
    - Linie wird per GraphicsDrawCurve gezeichnet -> Smoothing sowie Penwahl möglich !

    Todo:
    Code ansehen und verstehen -> Code verbessern :)

    Spoiler anzeigen
    [autoit]

    #include <GdiPlus.au3>
    #include <Array.au3>

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

    Opt("MouseCoordMode", 2)
    $hGUI = GUICreate("Funktionsplotter", 700, 418, -1, -1)

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

    GUICtrlCreateLabel("", 424, 168, 260, 1, 7)
    GUICtrlCreateLabel("", 424, 272, 260, 1, 7)

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

    Local $fXMin, $fXMax, $fYMin, $fYMax, $sEquation, $iMouseTemp

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

    $hXMin = GUICtrlCreateInput("-10", 488, 14, 57, 34, 1)
    $hXMax = GUICtrlCreateInput("10", 488, 54, 57, 34, 1)
    $hXScale = GUICtrlCreateInput("1", 488, 94, 57, 34, 1)
    $hYMin = GUICtrlCreateInput("-10", 624, 14, 57, 34, 1)
    $hYMax = GUICtrlCreateInput("10", 624, 54, 57, 34, 1)
    $hYScale = GUICtrlCreateInput("1", 624, 94, 57, 34, 1)
    $hAxis = GUICtrlCreateCheckbox("Achsen", 424, 136, 89, 17)
    $hXValue = GUICtrlCreateLabel("0", 496, 288, 183, 30, 1)
    $hYValue = GUICtrlCreateLabel("0", 496, 320, 183, 30, 1)
    $hEquation = GUICtrlCreateInput("sin(cos(x))^9*13+sin(3.4*x)", 424, 214, 257, 34, 1)
    $hDrawGraph = GUICtrlCreateButton("Zeiche Graphen", 416, 361, 275, 49)

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

    Local $aControls[20] = [GUICtrlCreateLabel("XMin:", 424, 16, 56, 30), GUICtrlCreateLabel("XMax:", 424, 56, 60, 30), GUICtrlCreateLabel("XScale:", 424, 96, 67, 30), _
    GUICtrlCreateLabel("YMin:", 560, 16, 55, 30), GUICtrlCreateLabel("YMax:", 560, 56, 59, 30), GUICtrlCreateLabel("YScale:", 560, 96, 66, 30), _
    GUICtrlCreateLabel("Funktion:", 424, 184, 86, 30), GUICtrlCreateLabel("X Wert:", 424, 288, 71, 30), GUICtrlCreateLabel("Y Wert:", 424, 320, 70, 30), _
    $hXMin, $hXMax, $hXScale, $hYMin, $hYMax, $hYScale, $hAxis, $hXValue, $hYValue, $hEquation, $hDrawGraph]

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

    For $i = 0 To UBound($aControls) - 1
    GUICtrlSetFont($aControls[$i], 16, 800, 0, "Calibri")
    Next

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

    GUICtrlSetState($hAxis, 1)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI), _
    $hWhiteBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF), _
    $hRedBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)

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

    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)

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

    _DrawFrame()

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

    OnAutoItExitRegister("_CleanExit")

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

    While Sleep(10)
    Switch GUIGetMsg()
    Case -3
    _CleanExit()

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

    Case $hDrawGraph
    _DrawFrame()

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

    EndSwitch

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

    If $iMouseTemp <> MouseGetPos(0) and MouseGetPos(0) >= 8 and MouseGetPos(0) <= 408 and MouseGetPos(1) >= 8 and MouseGetPos(1) <= 408 Then
    $fXMin = Number(GUICtrlRead($hXMin))
    $fXMax = Number(GUICtrlRead($hXMax))
    $sEquation = StringReplace(GUICtrlRead($hEquation), ",", ".")
    $iMouseTemp = MouseGetPos(0)

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

    GUICtrlSetData($hXValue, Round((MouseGetPos(0) - 8) / 400 * (Abs($fXMin) + Abs($fXMax)) + $fXMin, 5))
    GUICtrlSetData($hYValue, Round(Execute(StringReplace($sEquation, "x", (MouseGetPos(0) - 8) / 400 * (Abs($fXMin) + Abs($fXMax)) + $fXMin)), 5))
    EndIf
    WEnd

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

    Func _DrawFrame()
    Local $fXMin = Number(GUICtrlRead($hXMin)), $fXMax = Number(GUICtrlRead($hXMax)), _
    $fYMin = Number(GUICtrlRead($hYMin)), $fYMax = Number(GUICtrlRead($hYMax)), _
    $fXScale = Number(GUICtrlRead($hXScale)), $fYScale = Number(GUICtrlRead($hYScale)), _
    $sEquation = StringReplace(GUICtrlRead($hEquation), ",", "."), $fTmp, _
    $iX = -1 * $fXMin / (Abs($fXMin) + Abs($fXMax)) * 398 + 9, _
    $iY = -1 * $fYMin / (Abs($fYMin) + Abs($fYMax)) * 398 + 9, _
    $aPoints[1][2]

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

    _GDIPlus_GraphicsFillRect($hGraphics, 8, 8, 400, 400, $hWhiteBrush)
    _GDIPlus_GraphicsDrawRect($hGraphics, 8, 8, 400, 400)

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

    If $fXMin > $fXMax Then
    MsgBox(16, "Fehler", "XMin ist größer als XMax.")
    ElseIf $fYMin > $fYMax Then
    MsgBox(16, "Fehler", "YMin ist größer als YMax.")
    Else
    If BitAND(GUICtrlRead($hAxis), 1) and $fXMin * $fXMax < 0 Then
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX, 8, $iX, 408)
    For $i = $fYMin To $fYMax Step $fYScale
    _GDIPlus_GraphicsDrawLine($hGraphics, $iX - 3, (-1 * ($i - $fYMin) / (Abs($fYMin) + Abs($fYMax)) * 398 + 9) + 398, $iX + 3, (-1 * ($i - $fYMin) / (Abs($fYMin) + Abs($fYMax)) * 398 + 9) + 398)
    Next
    EndIf
    If BitAND(GUICtrlRead($hAxis), 1) and $fYMin * $fYMax < 0 Then
    _GDIPlus_GraphicsDrawLine($hGraphics, 8, $iY, 408, $iY)
    For $i = $fXMin To $fXMax Step $fXScale
    _GDIPlus_GraphicsDrawLine($hGraphics, ($i - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 398 + 9, $iY - 3, ($i - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 398 + 9, $iY + 3)
    Next
    EndIf

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

    For $i = $fXMin To $fXMax Step (Abs($fXMin) + Abs($fXMax)) / 398
    ;~ _GDIPlus_GraphicsDrawLine($hGraphics, ($i - (Abs($fXMin) + Abs($fXMax)) / 400 - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 400 + 8, _
    ;~ (-1 * Execute(StringReplace($sEquation, "x", $i - (Abs($fXMin) + Abs($fXMax)) / 400)) - $fYMin) / (Abs($fYMin) + Abs($fYMax)) * 400 + 8, _
    ;~ ($i - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 400 + 8, _
    ;~ (-1 * Execute(StringReplace($sEquation, "x", $i)) - $fYMin) / (Abs($fYMin) + Abs($fYMax)) * 400 + 8, $hRedBrush)

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

    $fTmp = (-1 * Execute(StringReplace($sEquation, "x", $i)) - $fYMin) / (Abs($fYMin) + Abs($fYMax)) * 398 + 9

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

    If $fTmp >= 9 and $fTmp <= 407 Then
    _ArrayAdd($aPoints, ($i - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 398 + 9 & '|' & $fTmp)
    EndIf

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

    ;~ _GDIPlus_GraphicsFillRect($hGraphics, ($i - $fXMin) / (Abs($fXMin) + Abs($fXMax)) * 398 + 9, $fTmp, 1, 1, $hRedBrush)
    Next
    EndIf

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

    $aPoints[0][0] = UBound($aPoints) - 1
    ;~ _ArrayDisplay($aPoints)
    Local $hPen = _GDIPlus_PenCreate(0xFF402010, 2)
    _GDIPlus_GraphicsDrawCurve($hGraphics, $aPoints, $hPen)
    _GDIPlus_PenDispose($hPen)

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

    EndFunc

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

    Func _CleanExit()
    _GDIPlus_BrushDispose($hRedBrush)
    _GDIPlus_BrushDispose($hWhiteBrush)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]


    lg
    M

  • AutoIt Screensaver collection - GDIPlus / Direct2D

    • Mars
    • 4. Juni 2014 um 11:35

    Das liegt vermutlich am verschiedenen Seitenverhältnis.
    Es tut mir jetzt schon leid für den riesigen Screenshot :D
    Bei mir läufts wunderbar, habe 2 Bildschirme mit jeweils 16:10. Läuft auf beiden parallel flüssig und "rund".

    Mir ist aufgefallen, dass Apps nicht übermalt werden. Habe aber auch keine Idee, wie man da etwas machen kann, Apps sind so ne Sache^^
    System ist Win8.1, Auflösungen sind 1920x1200 und 1680x1050

    lg
    M

    Dateien

    unnamed.png 171,6 kB – 0 Downloads
  • Hallo bin neu hier

    • Mars
    • 3. Juni 2014 um 22:56

    Wer sich natürlich einen Thread aufmacht und dann gestrichene 9h nicht nachsieht was abgeht, der hat keine Chance ;)

  • _FileListTreeToArray

    • Mars
    • 30. Mai 2014 um 23:03

    @error wird nach jedem Funktionsaufruf gelöscht. Ihn als letztes abzufragen ist also sinnlos

  • In bestimmten Bildbereich Zahl erkennen

    • Mars
    • 27. Mai 2014 um 21:44

    Der Rechenaufwand zur Textsynthese aus Bildern (gilt selbstverständlich auch für Zahlen) ist weit über dem was mit AutoIt (nativ) möglich ist.
    Das Problem bei der Sache ist, dass es keine "Formel" gibt um aus einem Haufen Pixel einen Buchstaben zu zaubern. Es gibt verschiedene Schriftarten, verschiedene Textgrößen, verschiedene Schriftfarben, usw.

    Im Prinzip ist diese Sache ähnlich wie eine klassische Vektorisierung (und die ist selbst mit guter Software heutzutage nicht immer Fehlerlos).

    Das Problem muss anders angegangen werden. Dazu müsste aber bekannt sein woher die Zahl auf deinem Bildschirm kommt. Browser haben z.B. HTML (das kann man absuchen und die gewünschte Zahl herausfiltern).

    Edit: Wenn man Alle Parameter der Schrift kennt ist es eventuell mit ImageSearch möglich einzelne Zahlen zu finden.

    lg
    M

  • Doppelte Einträge List

    • Mars
    • 26. Mai 2014 um 11:55

    Ohje...
    Da habe ich wohl nicht richtig gelesen :S

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™