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

Beiträge von UEZ

  • die neuen GDIplus Funktionen funzen nicht unter XP

    • UEZ
    • 4. Dezember 2014 um 14:01

    Na ja, wenn man die GDIPlus.dll patchen muss, ist dies doch ein Eingriff, der bestimmt nicht erlaubt ist, zumal man sich eine DLL von einer anderen Windows Version holen muss, die man nicht lizensiert hat, wenn man nur WinXP betreibt.

    Ich habe nicht die EULA gelesen, so dass ich nur vermuten kann...

    Gruß,
    UEZ

  • die neuen GDIplus Funktionen funzen nicht unter XP

    • UEZ
    • 4. Dezember 2014 um 08:46

    GDIPlus v1.1 ist nur ab Vista / Server 2008 oder höher verfügbar. Allerdings kann man GDI+ v1.1 auch unter WinXP benutzen, aber kann sein, dass dies gegen die MS EULA verstößt.

    WinXP ist nach meiner Meinung, bei allem Respekt für die WinXP Zieten, alter Tobak und sollte durch ein moderneres BS abgelöst werden.

    Gruß,
    UEZ

  • Multiplikation von mathematischen Variablen -> 2x*3x = 6x^2

    • UEZ
    • 2. Dezember 2014 um 18:26

    Wenn du es bei diesem "simplen" Beispiel belässt, dann ist das einfach, aber willst du eine Mathe Parser schreiben, dann wird's richtig kompliziert.

    Gruß,
    UEZ

  • Tutorial – OOP in AutoIt

    • UEZ
    • 29. November 2014 um 20:16

    Finde ich sehr gut gelungen. :thumbup:

    Hast du auch ein herunterladbare Version?

    Gruß,
    UEZ

  • Powershell Command aus AUTOIT ausführen

    • UEZ
    • 25. November 2014 um 23:18

    Vielleicht hilft dieser Thread: http://www.autoitscript.com/forum/topic/147273-powershell-com
    Allerdings sind AD Aufgaben mit der UDF von water besser bedient, als mit PS indirekt zu arbeiten.


    Br,
    UEZ

  • Alles Gute, UEZ

    • UEZ
    • 25. November 2014 um 21:46

    Dann prost auf die nächsten Jahre hier im Forum. :party:

    Vielen Dank und Grüße,
    UEZ

  • wie kann man ein GIF incl. Transparenz speichern (z.B. _ScreenCapture_Capture)

    • UEZ
    • 25. November 2014 um 11:44

    Du kannst so was hier benutzen:

    Spoiler anzeigen
    [autoit]


    ;benötigt 3.3.12.0
    #include <ScreenCapture.au3>

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

    _GDIPlus_Startup()
    Global $iWidth = 400, $iHeight = 400
    Global $hBitmap_GDI = _ScreenCapture_Capture("", 0, 0, $iWidth - 1, $iHeight - 1, 0)
    Global $hBitmap_GDIPlus = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap_GDI)
    Global $hBitmap_Result = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Global $hBitmap_Result_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Result)

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

    Global $aRemapTable[2][2]
    $aRemapTable[0][0] = 1
    $aRemapTable[1][0] = 0xFFFFFFFF ;Farbe, die Transparent gemacht werden soll
    $aRemapTable[1][1] = 0x08000000 ;Semi Transparenz - Format 0xAARRGGBB

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

    Global $hIA = _GDIPlus_ImageAttributesCreate()
    _GDIPlus_ImageAttributesSetRemapTable($hIA, 1, True, $aRemapTable)
    _GDIPlus_GraphicsDrawImageRectRect($hBitmap_Result_Ctxt, $hBitmap_GDIPlus, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)
    _GDIPlus_ImageSaveToFile($hBitmap_Result, @ScriptDir & "\Result.png")

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

    _GDIPlus_GraphicsDispose($hBitmap_Result_Ctxt)
    _GDIPlus_BitmapDispose($hBitmap_GDIPlus)
    _GDIPlus_BitmapDispose($hBitmap_Result)
    _WinAPI_DeleteObject($hBitmap_GDI)
    _GDIPlus_ImageAttributesDispose($hIA)
    _GDIPlus_Shutdown()

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

    ShellExecute(@ScriptDir & "\Result.png")

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

    Func _GDIPlus_ImageAttributesSetRemapTable($hImageAttributes, $iColorAdjustType = 0, $fEnable = False, $aColorMap = 0)
    Local $iI, $iCount, $tColorMap, $aResult
    If IsArray($aColorMap) And UBound($aColorMap) > 1 Then
    $iCount = $aColorMap[0][0]
    $tColorMap = DllStructCreate("uint ColorMap[" & $iCount * 2 & "]")
    For $iI = 1 To $iCount
    $tColorMap.ColorMap((2 * $iI - 1)) = $aColorMap[$iI][0]
    $tColorMap.ColorMap((2 * $iI)) = $aColorMap[$iI][1]
    Next
    $aResult = DllCall($__g_hGDIPDll, "int", "GdipSetImageAttributesRemapTable", "handle", $hImageAttributes, "int", $iColorAdjustType, "int", $fEnable, "int", $iCount, "struct*", $tColorMap)
    If @error Then Return SetError(@error, @extended, False)
    If $aResult[0] Then Return SetError(10, $aResult[0], False)
    Return True
    EndIf
    Return SetError(11, 0, False)
    EndFunc ;==>_GDIPlus_ImageAttributesSetRemapTable

    [/autoit]

    Die weiße Fläche sollte komplett Transparent sein.

    Gruß,
    UEZ

  • wie kann man ein GIF incl. Transparenz speichern (z.B. _ScreenCapture_Capture)

    • UEZ
    • 25. November 2014 um 11:12

    Warum willst du im GIF Format speichern? Wäre PNG nicht die bessere Wahl?

    Du kannst zwar mit GDI+ im GIF Format speichern, aber, soweit ich mich erinnere, wird das Bild "gedithered", was nicht umbedingt schön aussieht.

    Gruß,
    UEZ

  • Animation mit GDI+ und Bildern

    • UEZ
    • 24. November 2014 um 21:39

    Die Funktion

    [autoit]


    Func Scale_Image($hImage, $newW, $newH)
    Local $newImage = _GDIPlus_BitmapCreateFromScan0($newW, $newH)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($newImage)
    _GDIPlus_GraphicsSetInterpolationMode($hContext, 7)
    _GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, $newW, $newH)
    _GDIPlus_GraphicsDispose($hContext)
    Return SetError(0, 0, $newImage)
    EndFunc ;==>Scale_Image

    [/autoit]

    gibt einen Grafik Handle zurück, sodass dieser nach Benutzung wieder freigegeben werden muss. D.h. _GDIPlus_GraphicsDrawImage($hImage, Scale_Image(), ...) ist keine gute Idee, da bei jedem Aufruf das Bild zwar skaliert wird, aber die Ressourcen nicht wieder freigegeben werden.

    Am besten sowas machen:

    [autoit]


    For $t = 0 To $picwith
    $hBmp_Scaled = Scale_Image($pichandle, $t, $pichigh)
    _GDIPlus_GraphicsDrawImage($hImage, $hBmp_Scaled, $posx + ($picwith / 2) - ($t / 2), $posy)
    _GDIPlus_BitmapDispose($hBmp_Scaled)
    Next

    [/autoit]

    Gruß,
    UEZ

  • Animation mit GDI+ und Bildern

    • UEZ
    • 24. November 2014 um 20:56

    Na ja,

    [autoit]


    For $t = 0 To UBound($pics) - 1
    $pichandles[$t] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Pics\" & $pics[$t])
    $used[$t] = False
    $picnamen[$t] = $pics[$t]
    Next

    [/autoit]


    lädt doch alle Bilder in den Speicher. Das frisst deinen Speicher auf, wenn du viele Bilder hast.

    Du solltest, bevor du das Bild anzeigen willst, erst dann laden und anschließend wieder das Handle freigeben (Dispose).

    Gruß,
    UEZ

  • Animation mit GDI+ und Bildern

    • UEZ
    • 24. November 2014 um 20:31

    Lade die Bilder nicht alle auf einmal in den Speicher, sondern speicher nur die Pfade zu den Bildern und lade die Bilder anschließend "on-the-fly".

    Gruß,
    UEZ

  • Zeichen in Text ersetzen..

    • UEZ
    • 24. November 2014 um 09:56

    Du musst auch den Rückgabe Wert von StringReplace() speichern, sonst passiert nichts.

    Z.B: $Replace = StringReplace($Replace, ";DISCONNECT;" & $i & ";", ";DISCONNECT_old;" & $i & ";")

    Gruß,
    UEZ

  • MKV Buddy, Ein Video Bearbeitungstool der besonderen Art.

    • UEZ
    • 21. November 2014 um 23:05

    Dann einfach den Menü Eintrag disablen. ;)

    Gruß,
    UEZ

  • MKV Buddy, Ein Video Bearbeitungstool der besonderen Art.

    • UEZ
    • 21. November 2014 um 22:33

    Ich bekomme ein FM, wenn ich "Configuration -> Fanart" selektiere -> "An Error occured" und das Programm wird beendet.

    Gruß,
    UEZ

  • MKV Buddy, Ein Video Bearbeitungstool der besonderen Art.

    • UEZ
    • 21. November 2014 um 22:09

    Interessanter Projekt. Ich werde es mir näher anschauen...

    Damke und Gruß,
    UEZ

  • AutoIt Sysinternal Tools Synchronizer v0.99.6 build 2020-09-23 beta

    • UEZ
    • 20. November 2014 um 20:57

    Kleines Update: einige Fehler behoben.

    Gruß,
    UEZ

  • _GDIPlus_GraphicsDraw spiegeln und drehen

    • UEZ
    • 18. November 2014 um 09:25

    Hier mein Vorschlag:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    Global $g_hGUI, $g_hGraphics, $g_hBmp_Buffer, $g_hGfx_Buffer, $g_hImage
    Global $g_iMouseX, $g_iMouseY
    Local $hGUI, $hGraphic, $hPen,$aArray,$g_hBmp_Buffer,$g_hGraphics
    Local $g_iMouseX,$g_iMouseY,$lParam, $fY1, $fY2, $fY = 180.0

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

    $hGUI = GUICreate("GDI+", 1000, 300)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    If Not _FileReadToArray("a2.din", $aArray, 0) Then
    MsgBox($MB_SYSTEMMODAL, "", "There was an error reading the file. @error: " & @error) ; An error occurred reading the current script file.
    EndIf
    $hPen = _GDIPlus_PenCreate(0xFF101060)
    For $x = 1 To UBound($aArray)-1
    If StringInStr($aArray[$x],"G00 X") Then
    ;~ _GDIPlus_GraphicsDrawLine($hGraphic, StringTrimLeft($spl[2],1), StringTrimLeft($spl[3],1), StringTrimLeft($spl2[2],1), StringTrimLeft($spl2[3],1), $hPen)
    ElseIf StringInStr($aArray[$x],"G01 X") Then
    $spl = StringSplit($aArray[$x]," ")
    $spl2 = StringSplit($aArray[$x-1]," ")
    If $spl[0] >= 3 and $spl2[0] >= 3 Then
    IF StringTrimLeft($spl2[2],1) = "-0.1" Then

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

    Else
    $fY1 = -StringTrimLeft($spl[3],1) + 2 * $fY ;y1 Punkt an der Koordinate fY spiegeln
    $fY2 = -StringTrimLeft($spl2[3],1) + 2 * $fY ;y2 Punkt an der Koordinate fY spiegeln
    _GDIPlus_GraphicsDrawLine($hGraphic, StringTrimLeft($spl[2],1),$fY1, StringTrimLeft($spl2[2],1), $fY2, $hPen)
    EndIf
    EndIf
    EndIf
    Next

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Clean up resources
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit]


    Gruß,
    UEZ

  • AutoIt Sysinternal Tools Synchronizer v0.99.6 build 2020-09-23 beta

    • UEZ
    • 15. November 2014 um 11:42

    Ist mir nie aufgefallen, aber du hast recht. Danke, habe die Zeile nach oben verschoben. :thumbup:

    _WinAPI_AnimateWindow() hat manchmal komische Seiteneffekte...

    Ich hoffe, dass der Code einigermaßen lesbar und verständlich ist, da ich kaum kommentiere. :whistling:


    Gruß,
    UEZ

  • Parameter auf Array splitten

    • UEZ
    • 13. November 2014 um 22:26

    Kannst du nicht die Ini anders speichern, z.B. die Trennung der Zellen nicht Komma ist, sondern irgend ein anderes sinnvolles Zeichen?

    So wird das ziemlich kompliziert....

    Gruß,
    UEZ

  • Parameter auf Array splitten

    • UEZ
    • 13. November 2014 um 21:41

    Schaue mal, ob du damit was anfangen kannst:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    $String = '"testfenster, test, test (abcd)", 10, 10, iniread("test.ini","test","test","test"), "test"' & @CRLF
    $aResult = StringSplitW(StringRegExpReplace($String, '(",")', "|"), ",")

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

    _ArrayDisplay($aResult)

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

    ; #FUNCTION# ========================================================================================================================================
    ; Name .................: StringSplitW()
    ; Description ..........: Splits a string into columns instead of rows as it is done by SplitString(), like a csv file to a 2d array ;)
    ; Syntax ...............: StringSplitW($sString, $sDelimiter, $iWidthLen)
    ; Parameters ...........: $sString - string to split
    ; $sDelimiter - [optional] the delimter how to split the string
    ; $iWidthLen - [optional] length of the row (amount of columns - default is 256)
    ; Return values .......: Success - 2d array
    ; Error 1 - either $sString or $delimter is not set
    ; Error 2 - array width exceeded
    ; Error 3 - error splitting string
    ;
    ; Version .............: v0.95 build 2014-06-06 beta
    ; Author ..............: UEZ
    ; Modified ............:
    ; Remarks .............: RegEx take from http://stackoverflow.com/questions/4476…r-within-quotes
    ; Related .............: StringSplit, StringReplace, StringRegExpReplace, StringLen, StringStripCR
    ; ===================================================================================================================================================
    Func StringSplitW($sString, $sDelimiter = ";", $sQuotationMark = '"', $sDummy = "¦", $iWidthLen = 256)
    If $sString = "" Or $sDelimiter = "" Then Return SetError(1, 0, 0)
    Local $chk, $iWidth, $i, $j, $k, $iLen, $iMax = 1, $iMaxWidth
    Local $aPos[1], $l = 0
    Local $aSplit = StringSplit(StringStripCR($sString), @LF)
    If @error Then Return SetError(3, 0, 0)
    Local $aVertical[$aSplit[0]][$iWidthLen], $iDelimiterLen = StringLen($sDelimiter) - 1, $sLine
    For $k = 1 To $aSplit[0]
    $iLen = StringLen($aSplit[$k])
    If $iLen > 1 Then
    $sLine = StringRegExpReplace($aSplit[$k], '(?m)' & $sDelimiter & '(?=[^' & $sQuotationMark & ']*' & $sQuotationMark & '(?:[^' & $sQuotationMark & '\r\n]*' & $sQuotationMark & '[^' & $sQuotationMark & ']*' & $sQuotationMark & ')*[^' & $sQuotationMark & '\r\n]*$)', $sDummy)
    $chk = StringReplace($sLine, $sDelimiter, $sDelimiter)
    $iWidth = @extended
    If $iWidth > $iWidthLen Then Return SetError(2, 0, 0)
    If $iWidth >= $iMax Then $iMax = $iWidth + 1
    Switch $iWidth
    Case 0
    $aVertical[$l][0] = $sLine
    Case Else
    Dim $aPos[$iWidth * 2 + 2]
    $j = 1
    $aPos[0] = 1
    For $i = 0 To $iWidth - 1
    $aPos[$j] = StringInStr($sLine, $sDelimiter, 0, $i + 1) - 1
    $aPos[$j + 1] = $aPos[$j] + 2 + $iDelimiterLen
    $j += 2
    Next
    $aPos[UBound($aPos) - 1] = StringLen($sLine)
    $j = 0
    For $i = 0 To UBound($aPos) - 1 Step 2
    $aVertical[$l][$j] = StringMid(StringReplace($sLine, $sDummy, $sDelimiter), $aPos[$i], $aPos[$i + 1] - $aPos[$i] + 1)
    $j += 1
    Next
    EndSwitch
    $l += 1
    EndIf
    Next
    ReDim $aVertical[$l][$iMax]
    Return $aVertical
    EndFunc

    [/autoit]

    Das Array wird als 2D Array erstellt.

    Gruß,
    UEZ

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™