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

Beiträge von eukalyptus

  • Suche eine (schnelle) IsInRect Funktion...

    • eukalyptus
    • 13. Oktober 2010 um 06:54
    Zitat von Andy


    Sehr interessant auch, dass die Sequenz

    [autoit]

    if erstervergleich then
    if zweiterverglech then
    if drittervergleich then
    if viertervergleich then

    [/autoit]

    LANGSAMER ist als der Einzeiler, der IMMER ALLE Vergleiche durchführen muss...

    Nein, die Vergleiche werden von links nach rechts durchgeführt und nicht weitergemacht, sobald eine Bedingung nicht zutrifft.
    Das ist sehr praktisch, wenn man z.B. in der ersten Bedingung auf IsArray prüft und in der zweiten gleich einen Arraywert hernimmt:

    [autoit]

    Global $Var = "abc"
    If IsArray($Var) And $Var[0] = True Then ... ; <- geht
    If $Var[0] = True And IsArray($Var) Then ... ; <- Subscript used with non-Array variable

    [/autoit]


    Und einzeilige IF sind grundsätzlich schneller als IF..EndIf

  • Arrayfehler in Funktion

    • eukalyptus
    • 13. Oktober 2010 um 06:18
    [autoit]

    If IsArray($RegExp) Then _ArrayAdd($aModules, $RegExp[0] & ".dll")

    [/autoit]
  • GDI+ Bitmap.SetPixel

    • eukalyptus
    • 12. Oktober 2010 um 12:59

    Ich hab mir das jetzt nur kurz angesehen, aber probier mal ImageLockMode-Flags bei LockBits auf ReadWrite zu setzten.

  • Happy Birthday Progandy

    • eukalyptus
    • 12. Oktober 2010 um 02:37

    Happy birthday! :party:
    Und Danke für deine großartige Arbeit und Hilfsbereitschaft!

  • Variablenübergabe bei Funktionsaufruf (doofe überschrift)

    • eukalyptus
    • 8. Oktober 2010 um 17:48

    Machs mit ByRef:

    [autoit]

    Func Test(ByRef $Base, $New)
    $_Temp = DllCall($S_DLL, "long", "Get", "long", $Base, "long", $New)
    $Base = $_Temp[0]
    endfunc

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

    Test($RGB1, $New)

    [/autoit]

    E

  • Handle auslesen

    • eukalyptus
    • 5. Oktober 2010 um 10:48

    Du kannst mit _WinAPI_CreateStreamOnHGlobal und _GDIPlus_ImageSaveToStream (beide in der GDIp.au3) direkt im Speicher ein JPG aus dem Screenshot erstellen.

  • Standard Wiedergabegerät

    • eukalyptus
    • 5. Oktober 2010 um 10:11

    Falls die Soundkarte mehrere Outputs hat, dann kann man zwischen diesen via Bass.dll nicht hin und her schalten.
    (Evtl. geht das unter Vista / Win7, da dort die einzelnen Outputs als eigenständige Soundkarten behandelt werden)

    Wenn es verschiedene Soundkarten sind, dann kann man das machen.

    Du kannst ja mal mit diesem Script rausfinden, welche Soundkarten in welcher Reihenfolge du hast:

    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"

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

    _BASS_Startup(@ScriptDir & "\bass.dll")

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

    $iCnt = 0
    While 1
    $aInfo = _BASS_GetDeviceInfo($iCnt)
    If @error Or Not IsArray($aInfo) Then ExitLoop
    ConsoleWrite(@CRLF & "> " & $iCnt & " " & $aInfo[0] & @CRLF)
    Switch BitAND($aInfo[2], $BASS_DEVICE_ENABLED)
    Case True
    ConsoleWrite("+ Device is enabled" & @CRLF)
    Case Else
    ConsoleWrite("! Device is disabled" & @CRLF)
    ContinueLoop
    EndSwitch
    If BitAND($aInfo[2], $BASS_DEVICE_DEFAULT) Then ConsoleWrite("! This is the default output device" & @CRLF)
    $iCnt += 1
    WEnd

    [/autoit]

    Bevor du _Bass_SetDevice() verwenden kannst, musst du _Bass_Init() aufrufen...

    E

  • Suche eine GDi+ Profi, der mit erklären kann wie man ein Bitmap beschriftet.

    • eukalyptus
    • 5. Oktober 2010 um 10:01
    Zitat von Raupi


    Hab aber jetzt mal eine Frage dazu. Braucht man die GUI dazu überhaupt?
    Irgendwie kapiere ich nicht für was ein Bitmap von der GUI ertstellt werden muß.
    Kann man das nicht direkt machen?

    Grob erklärt gibt es zwei Arten von Bitmaps:
    Device Independent Bitmap (DIB)
    Device Dependent Bitmap (DDB)

    Man muss z.b. die Farbtiefe angeben, wenn man ein Bitmap erstellt.
    Das kann man manuell machen mit z.b: _WinAPI_CreateDibSection wie hier: [ gelöst ] GDI+ unterschiedliche Icon-Transparenz
    Oder man erstellt ein DDB Bitmap mit der Farbtiefe des Bildschirms wie im Beispiel von UEZ - das geht wesentlich schneller und einfacher.

    mfgE

  • Hovereffekt auf GUI

    • eukalyptus
    • 5. Oktober 2010 um 09:49

    Such mal im englischen Forum nach MouseSetOnEvent und GUICtrlSetOnHover

    mfgE

  • [Auswertung läuft...] µitLight September/Oktober

    • eukalyptus
    • 2. Oktober 2010 um 07:08
    Zitat von BugFix

    Nun habe ich gerade noch ein zweites Control erstellt...


    Du hast schon zwei 8|
    Ich muss mich reinhängen, damit ich überhaupt mit einem fertig werde!
    Ich hab mich ehrlich gesagt mit meinem Vorhaben etwas übernommen :D

    Eine eingeschränkte, lauffähige Version sollte sich ausgehen, aber die ganzen Feinheiten werd ich wohl vorerst mal auslassen.

    E

  • GDI+ Pixel Text Effect Beta Build 2010-10-21

    • eukalyptus
    • 2. Oktober 2010 um 06:51

    Wieder mal ein sehr gutes Script :thumbup:

    Allerdings musste ich eine kleine Änderung vornehmen, damit es bei mir auf WinXP flüssig läuft:

    in der Funktion Text_Explosion zuerst

    [autoit]

    Local $hBrushClear = _GDIPlus_BrushCreateSolid($clear)

    [/autoit]


    und dann die 2

    [autoit]

    _GDIPlus_GraphicsClear($hBuffer, $clear)

    [/autoit]

    durch

    [autoit]

    _GDIPlus_GraphicsFillRect($hBuffer, 0, 0, $iWidth, $iHeight, $hBrushClear)

    [/autoit]


    (am Ende der Funktion den Brush natürlich wieder disposen)

  • Audio Visualization Collection

    • eukalyptus
    • 30. September 2010 um 01:47

    Das soll mal eine Sammlung von zahlreichen Audio Visualisierungen werden.
    Wie sich das Projekt weiterentwickelt weiß ich noch nicht, evtl. ein "richtiger" Audioplayer mit Visuals...

    Momentan sind etwa 15 Visuals von UEZ und mir darin enthalten.
    Da ich es momentan nicht schaffe, daran weiter zu arbeiten, poste ich mal das aktuelle Script (im Anhang)

    Gute Vorschläge, Ideen, Kritiken und Feedbacks sind natürlich herzlich Willkommen! ^^

    E

    Dateien

    Audio Visualization.zip 328,91 kB – 1.086 Downloads
  • Statische Variablen in Funktionen

    • eukalyptus
    • 30. September 2010 um 01:01

    Sehr gut find ich Static beim Debuggen.

    Wenn ich z.B. wissen will wie oft eine Funktion aufgerufen wird oder wieviel Zeit dazwischen vergeht:

    [autoit]

    HotKeySet("{ESC}", "_Exit")

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

    While 1
    Sleep(Random(100, 1000))
    _Func()
    _Func2()
    WEnd

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

    Func _Func()
    Local Static $iTimer
    ConsoleWrite(TimerDiff($iTimer) & @CRLF)
    $iTimer = TimerInit()
    EndFunc

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

    Func _Func2()
    Local Static $iCnt = 0
    ConsoleWrite($iCnt & @CRLF)
    $iCnt += 1
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Oder auch Rekursiv

    [autoit]

    _Rekursiv()

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

    Func _Rekursiv()
    Local Static $iCnt = 0
    ConsoleWrite($iCnt & @CRLF)
    $iCnt += 1
    If $iCnt > 10 Then Return
    _Rekursiv()
    EndFunc

    [/autoit]
  • GDI+: Weichzeichnen u. Verdunkeln möglich?

    • eukalyptus
    • 30. September 2010 um 00:37

    zum Beispiel so:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include "GDIP.au3"
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $sFile = FileOpenDialog("Öffnen", "", "(*.jpg;*.bmp;*.png;*.tif)")

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

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    $iWidth = _GDIPlus_ImageGetWidth($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_EXIT")
    GUISetState()

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBitmap = _Blur($hImage, 0.2)

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

    $bBlur = True
    While 1
    Switch $bBlur
    Case True
    _GDIPlus_GraphicsDrawImage($hGraphics, $hImage, 0, 0)
    $bBlur = False
    Case Else
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    $bBlur = True
    EndSwitch

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

    Sleep(500)
    WEnd

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

    Func _Blur($hBitmap, $fScale = 0.2)
    Local $iW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $iH = _GDIPlus_ImageGetHeight($hBitmap)
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Local $hBmpSmall = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics)
    Local $hGfxSmall = _GDIPlus_ImageGetGraphicsContext($hBmpSmall)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxSmall, 2)
    Local $hBmpBig = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics)
    Local $hGfxBig = _GDIPlus_ImageGetGraphicsContext($hBmpBig)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBig, 2)
    _GDIPlus_GraphicsScaleTransform($hGfxSmall, $fScale, $fScale)
    _GDIPlus_GraphicsSetInterpolationMode($hGfxSmall, 2)
    _GDIPlus_GraphicsScaleTransform($hGfxBig, 1 / $fScale, 1 / $fScale)
    _GDIPlus_GraphicsSetInterpolationMode($hGfxBig, 2)

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

    _GDIPlus_GraphicsDrawImage($hGfxSmall, $hBitmap, 0, 0)
    _GDIPlus_GraphicsDrawImage($hGfxBig, $hBmpSmall, 0, 0)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBmpSmall)
    _GDIPlus_GraphicsDispose($hGfxSmall)
    _GDIPlus_GraphicsDispose($hGfxBig)
    Return $hBmpBig
    EndFunc ;==>_Blur

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

    Func _Exit()
    _GDIPlus_BitmapDispose($hImage)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    mfgE

  • Update - Audio Visualizing

    • eukalyptus
    • 30. September 2010 um 00:31

    Hmm, das Minus bedeutet wahrscheinlich, daß Bass.dll nicht existiert...
    hast du das Archiv auch vollständig entpackt?

  • GDI+: Weichzeichnen u. Verdunkeln möglich?

    • eukalyptus
    • 29. September 2010 um 19:28

    Weichzeichnen könntest du evtl auch so erreichen.

    Probier mal etwas mit diesen Funktionen rum:
    _GDIPlus_GraphicsScaleTransform
    _GDIPlus_GraphicsSetInterpolationMode
    _GdiPlus_GraphicsSetSmoothingMode

    euf ein temporäres Bitmap kleiner zeichnen und von dort wieder vergrößert auf das eigentliche Ziel zeichnen

    hab ich nicht ausprobiert und verspreche keinen Erfolg ;)

    mfgE

  • Statische Variablen in Funktionen

    • eukalyptus
    • 29. September 2010 um 19:14

    Ich komme mittlerweile gar nicht mehr ohne Static aus.
    Falls es sie in einer neuen AutoIt Version nicht mehr geben würde, dann wäre das ein guter Grund für mich nicht zu updaten!

    E

  • GDI+ unterschiedliche Icon-Transparenz

    • eukalyptus
    • 27. September 2010 um 19:08

    Ich hab nun endlich eine Lösung für das Problem gefunden:
    Das funktioniert allerdings nur mit 32bit-Icons,
    bei anderen kann man GdipCreateBitmapFromHICON verwenden

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>

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

    _GDIPlus_Startup()
    $hIcon = _WinAPI_ShellExtractIcon(@ScriptDir & '\item11.ico', 0, 128, 128)

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

    Local $hBmpDestroy
    $hBitmapIcon = _IconToGdiPlus($hIcon, 128, 128, $hBmpDestroy)
    _WinAPI_DestroyIcon($hIcon)

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

    $hGui = GUICreate('Test', 250, 200)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(250, 200, $hGraphic)
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    GUISetState()

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

    _GDIPlus_GraphicsClear($hBackbuffer, 0xFF006600)
    _GDIPlus_GraphicsDrawImageRect($hBackbuffer, $hBitmapIcon, 50, 50, 128, 128)

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

    Do
    Sleep(10)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
    Until GUIGetMsg() = -3

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

    _GDIPlus_ImageDispose($hBitmapIcon)
    _WinAPI_DeleteObject($hBmpDestroy)
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

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

    Func _IconToGdiPlus($hIcon, $iWidth, $iHeight, ByRef $hBmp)

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

    Local $tBITMAPINFO = DllStructCreate("dword Size;long Width;long Height;word Planes;word BitCount;dword Compression;dword SizeImage;long XPelsPerMeter;long YPelsPerMeter;dword ClrUsed;dword ClrImportant;dword RGBQuad")
    DllStructSetData($tBITMAPINFO, 'Size', DllStructGetSize($tBITMAPINFO) - 4)
    DllStructSetData($tBITMAPINFO, 'Width', $iWidth)
    DllStructSetData($tBITMAPINFO, 'Height', -$iHeight)
    DllStructSetData($tBITMAPINFO, 'Planes', 1)
    DllStructSetData($tBITMAPINFO, 'BitCount', 32)
    DllStructSetData($tBITMAPINFO, 'Compression', 0)
    DllStructSetData($tBITMAPINFO, 'SizeImage', 0)

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

    Local $hDC = _WinAPI_CreateCompatibleDC(0)
    Local $aRet = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBITMAPINFO), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0)
    Local $pBits = $aRet[4]
    $hBmp = $aRet[0]
    Local $hOrig = _WinAPI_SelectObject($hDC, $hBmp)
    _WinAPI_DrawIconEx($hDC, 0, 0, $hIcon, $iWidth, $iHeight)

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

    $aRet = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iWidth * 4, "int", 0x26200A, "ptr", $pBits, "int*", 0)
    Local $hBitmap = $aRet[6]
    _WinAPI_SelectObject($hDC, $hOrig)
    _WinAPI_DeleteDC($hDC)

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

    Return $hBitmap
    EndFunc ;==>_IconToGdiPlus

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_ShellExtractIcon
    ; Description....: Extracts the icon with the specified dimension from the specified file.
    ; Syntax.........: _WinAPI_ShellExtractIcon ( $sIcon, $iIndex, $iWidth, $iHeight )
    ; Parameters.....: $sIcon - Path and name of the file from which the icon are to be extracted.
    ; $iIndex - Index of the icon to extract.
    ; $iWidth - Horizontal icon size wanted.
    ; $iHeight - Vertical icon size wanted.
    ; Return values..: Success - Handle to the extracted icon.
    ; Failure - 0 and sets the @error flag to non-zero.
    ; Author.........: Yashied
    ; Modified.......:
    ; Remarks........: If the icon with the specified dimension is not found in the file, it will choose the nearest appropriate icon and
    ; change to the specified dimension. When you are finished using the icon, destroy it using the _WinAPI_DestroyIcon()
    ; function.
    ; Related........:
    ; Link...........: @@MsdnLink@@ SHExtractIcons
    ; Example........: Yes
    ; ===============================================================================================================================

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

    Func _WinAPI_ShellExtractIcon($sIcon, $iIndex, $iWidth, $iHeight)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
    If (@error) Or (Not $Ret[0]) Or (Not $Ret[5]) Then
    Return SetError(1, 0, 0)
    EndIf
    Return $Ret[5]
    EndFunc ;==>_WinAPI_ShellExtractIcon

    [/autoit]

    mfgE

  • Pilotentest

    • eukalyptus
    • 26. September 2010 um 00:44

    149.353 :P

  • _ExchangeVariables_SetVariable

    • eukalyptus
    • 24. September 2010 um 11:19

    wird in der internen Funktion __ExchangeVariables_MemoryGetStruct benötigt und heißt dort $sType

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™