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

Beiträge von name22

  • Raspberry Pi

    • name22
    • 15. März 2012 um 16:38

    Naja.. EInen Gameboy aufmöbeln kann man damit aber trotzdem ^^. Das wäre dann aber ein ziemlich leistungsfähiger Gameboy :S...
    Aber ich finde damit kann man noch so viel mehr anfangen, dass es fast schon schade wäre, es nur darauf zu beschränken.

  • datei löschen erzwingen

    • name22
    • 15. März 2012 um 15:29
    Zitat

    weil sonst ständig die cmd geöffnet ist


    Das kann man auch verhindern...
    Das Problem bei dem löschen einer verwendeten Datei ist, dass Windows das nicht zulässt (zum Glück... Sonst würde pures Chaos auf deinem Dateisystem ausbrechen ^^). Du musst entweder den Zugriff dieses Programms auf die Datei stoppen, oder die Datei löschen wenn der Prozess nicht darauf zugreift.
    Es gibt einige Tools die sowas können, aber mit AutoIt ist das nicht ohne Weiteres möglich. Vielleicht gibt es ja automatisierbare Tools die das können. Aber besonders empfehlenswert für einen so häufig wiederholten Vorgang finde ich das nicht. Dein Browser wird mir dabei vermutlich zustimmen (manche Dateien kann man afaik auch mit speziellen Tools nicht "freigeben"). Und wenn das doch funktionieren sollte, könnte es passieren, das manche Programme danach abstürzen oder einfach den Dienst verweigern.

  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 10:55
    Zitat

    Naja, ein Bild als Hintergrund habe ich bereits.


    Wie meinst du das? Ich hab ja auch nur ein Beispiel gemacht. Größe des Ladebalkens, verwendete Bilder, das lässt sich alles mit ein paar Variablen ändern. Ich dachte das wäre das wonach du suchst, wenn dem nicht so ist, wonach suchst du dann?

  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 10:40
    Zitat

    Leider funktioniert es damit irgend wie auch nicht :/


    Interessante Fehlerbeschreibung... Wie wäre es wenn du es mit GDI+ machst? :rolleyes:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    $iX = 50
    $iY = 15
    $iWidth = 300
    $iHeight = 50
    $iProgress = 0

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

    $sPath_ImageBG = @ScriptDir & "\BG.png"
    $sPath_ImageBar = @ScriptDir & "\Bar.png"

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

    $hWnd = GUICreate("Test", 400, 100)
    $cButton_Add = GUICtrlCreateButton("+10", 205, 70, 40, 20)
    $cButton_Sub = GUICtrlCreateButton("-10", 155, 70, 40, 20)
    GUISetState()

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

    _GDIPlus_Startup()

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetClipRect($hGraphics, $iX, $iY, $iWidth, $iHeight)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hImageBG = _GDIPlus_ImageLoadFromFile($sPath_ImageBG)
    $hImageBar = _GDIPlus_ImageLoadFromFile($sPath_ImageBar)

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

    _DrawProgress($iProgress)

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

    OnAutoItExitRegister("_Shutdown")
    GUIRegisterMsg($WM_PAINT, "_ReDraw")

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_RESTORE
    _ReDraw()
    Case $cButton_Add
    If $iProgress < 100 Then
    $iProgress += 10
    _DrawProgress($iProgress)
    EndIf
    Case $cButton_Sub
    If $iProgress > 0 Then
    $iProgress -= 10
    _DrawProgress($iProgress)
    EndIf
    EndSwitch
    WEnd

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

    Func _DrawProgress($iPercent)
    _GDIPlus_GraphicsSetClipRect($hBuffer, 0, 0, $iWidth, $iHeight)
    _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageBG, 0, 0, $iWidth, $iHeight)

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

    _GDIPlus_GraphicsSetClipRect($hBuffer, 0, 0, $iWidth / 100 * $iPercent, $iHeight)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageBar, 0, 0, $iWidth, $iHeight)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, $iX, $iY, $iWidth, $iHeight)
    EndFunc

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

    Func _Shutdown()
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_ImageDispose($hImageBG)
    _GDIPlus_ImageDispose($hImageBar)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func _ReDraw()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, $iX, $iY, $iWidth, $iHeight)
    EndFunc

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

    ;-GDIP.au3 Functions:
    Func _GDIPlus_GraphicsSetClipRect($hGraphics, $nX, $nY, $nWidth, $nHeight, $iCombineMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRect", "hwnd", $hGraphics, "float", $nX, "float", $nY, "float", $nWidth, "float", $nHeight, "int", $iCombineMode)

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

    If @error Then Return SetError(@error, @extended, False)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetClipRect

    [/autoit]


    Kopier mal die beiden Bilder im Anhang in das Scriptverzeichnis. Mit den Buttons kannst du die Progressbar steuern.
    Ist das wirklich so schwer?

    Bilder

    • BG.png
      • 11,16 kB
      • 300 × 50
    • Bar.png
      • 13,11 kB
      • 300 × 50
  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 09:42
    Zitat

    So, wie würde ich den jetzt bei meiner Funktion die Gui Transparent bekommen?


    Mit ein paar Funktionen die wesentlich aufwendiger und komplizierter sind als der GDI+ Code der nötig wäre um das auch so zu machen...
    Wenn du unbedingt wissen willst wie das geht, dann kannst du ja mal dieses Script von mir anschauen mit dem man auf einem transparenten Fenster zeichnen kann.
    Ansonsten würde ich dir empfehlen das einfach mal mit GDI+ zu versuchen. Das ist nicht so kompliziert wie viele denken, und außerdem benutzt du ja jetzt schon jede Menge Funktionen aus dieser UDF.
    Falls du das nicht hinkriegst kann man dir hier auch helfen, dafür ist das Forum ja da ;).

  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 08:42

    Ich finde das ist viel zu viel Aufwand.. Du könntest auch einfach GDI+ verwenden, anstatt zu versuchen mit unnötig viel Code dem Pic Control in AutoIt die selbe Funktionalität wie GDI+ zu geben. ;)

  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 08:29

    Ich sehe gerade, dass GUICTrlCreatePic wohl doch Teiltransparenz unterstützt (also Bitmaps mit Alphachannel). Und jetzt weiß ich auch wo dein Problem liegt..
    Dieser weiße Rand ist der Hintergrund der GUI die du in deiner GUICreatePic Funktion erstellst. Das Bild mag transparent sein, aber die GUI ist es nicht. Du müsstest also den Hintergrund der GUI von deinem Pic Control ändern, oder das Bild in ein Pic Control in deiner HauptGUI packen. Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>

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

    Global Const $STM_SETIMAGE = 0x0172

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

    _GDIPlus_Startup()

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

    $bImage_Pic = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Test.png")
    $bWidth = _GDIPlus_ImageGetWidth($bImage_Pic)
    $bHeight = _GDIPlus_ImageGetHeight($bImage_Pic)
    $hbmpPic = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bImage_Pic)

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

    $hwnd = GUICreate("ddd")
    $iPic = GUICtrlCreatePic("", 50, 50, $bWidth, $bHeight, BitOR($SS_NOTIFY, $WS_CLIPSIBLINGS, $GUI_SS_DEFAULT_PIC))
    GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hbmpPic)
    GUISetState()

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

    While GUIGetMsg() <> -3
    WEnd

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

    _GDIPlus_ImageDispose($bImage_Pic)
    _GDIPlus_Shutdown()

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

    _WinAPI_DeleteObject($hbmpPic)

    [/autoit]


    Falls du aber eine füssige Animation suchst, bist du wahrscheinlich mit reinem GDI+ ohne Pic Control besser bedient. Pic Controls sind eher für statische Bilder gedacht ;).

  • Transparenz bei Bildern

    • name22
    • 15. März 2012 um 07:53

    PNGs werden nicht vom Pic Control unterstützt und die von ihm unterstützten Bitmaps (die Funktion wandelt nur PNG zu BMP) können auch keinen Alphachannel haben soweit ich weiß. Es gibt nur die Möglichkeit eine GIF zu benutzen, aber die unterstützt nur volle oder gar keine Transparenz, keine zwischenwerte. Du könntest entweder das Bild direkt mit GDI+ auf die GUI zeichnen, oder den Hintergrund deines Ladebalkenbildes in der Hintergrundfarbe der GUI färben.

  • Webprogrammierung, Tutorials, Sprachen?

    • name22
    • 13. März 2012 um 21:14
    Zitat

    Die Seiten lassen sich dich auch mit deaktiviertem Javascript problemlos (wenn auch nicht ganz so bequem) nutzen. Auf ein paar Sachen muss man halt ohne Javascript verzichten (z.B. Schnellantwort auf AutoIt.de).


    Oder auch auf die Shoutbox, alle Buttons im Beitragseditor etc... Die Liste ist endlos, das betrifft nicht nur eine Sache oder so.
    Und inwiefern funktionieren die anderen Seiten denn bitte noch? Youtube ohne Javascript? Unbequem ist da ein wenig untertrieben schließlich kann man so keine Videos mehr anschauen (Was willst du da sonst machen?).
    Bei Google funktioniert InstantSearch nicht mehr, und auch diverse andere Suchhilfsmittel sind eingeschränkt. Und wie Google Maps ohne Javascript laufen soll verstehe ich leider auch nicht. Facebook ist bei mir völlig verbuggt, und einige Buttons sehen komisch aus und lassen keine Rückschlüsse auf ihre Funktion zu. Javascript ist im Internet Omnipräsent. Es gibt nicht viele Webseiten die ganz ohne Javascript auskommen, und ich finde es ein wenig bescheuert, wenn man aufgrund von einigen Sicherheitsrisiken o.Ä. (das Internet an sich ist ein einziges Sicherheitsrisiko) es zur Voraussetzung macht, seine Seite komplett ohne Javascript funktionieren zu lassen, oder einfach Javascript ganz abschaltet und Webseitenbetreibern praktisch sagt, dass sie ihre Webseiten ohne Javascript betreiben sollen. In einigen Fällen ist Javascript essenziell das lässt sich nicht vermeiden und ist nicht negativ. So sehe ich das zumindest.

  • Webprogrammierung, Tutorials, Sprachen?

    • name22
    • 13. März 2012 um 20:34
    Zitat

    @BB: Naja, Javascript sollte man bei einer Webseite eher vermeiden, da es von vielen Leuten deaktiviert wird. Auf jeden Fall sollte die Webseite auch ohne Javascript einigermasen funktionieren.


    :huh: AutoIt.de ohne Javascript? Oder Google, oder YouTube, oder Facebook...

  • Screen Flash

    • name22
    • 11. März 2012 um 15:38

    Das selbe in Grün....
    Du musst übrigens auch GraphicsClear nach jedem Schritt anwenden und das alles neuzeichnen was normalerweise erscheint. Dann zeichnest du das Rechteck drüber.

  • GDI+ Spielerei 3D-Linien

    • name22
    • 11. März 2012 um 14:41

    Mir ist gerade beim experimentieren mit diesem Script eine Idee gekommen.. Wie wäre es mit 3dimensionalen Fraktalen in AutoIt mit GDI+? Die Berechnungen würden am Anfang zwar eine Menge Zeit in Anspruch nehmen, aber "einfachere Dinge" wie zum Beispiel der Menger-Schwamm sollten doch möglich sein, oder?

  • Screen Flash

    • name22
    • 11. März 2012 um 14:36

    Zeichneimmer wieder ein Rechteck über das gesamte Fenster. Den Brush für dieses Rechteck kannst du Scritt für Schritt so anpassen:

    [autoit]

    _GDIPlus_BrushSetSolidColor($hBrush, BitShift($iTrans, -32) + 0x00FF00 ;Ungetestet, ich weiß nicht ob AutoIt mit so großen Integern umgeht wie ich es mir vorstelle...)

    [/autoit]


    $iTrans darf nur Integerwerte von 0 (Transparent) bis 255 (nicht Transparent) annehmen. Die zweite Hexadezimalzahl stellt die Farbe dar die dein Rechteck nachher haben soll im Format RRGGBB.
    Am Anfang sollte der Brush mit $iTrans = 255 erstellt werden, danach kannst du bis auf 0 herunterzählen (nicht unter 0, danach muss abgebrichen werden!). Wenn du willst, kannst du auch die Sinusfunktion verwenden, um einen "weicheren" Übergang zu erzeugen, nur musst du dann mit Round oder Int die Zahl auf den einen ganzzahligen Wert runden.

  • GDI+ Spielerei 3D-Linien

    • name22
    • 10. März 2012 um 22:30

    Danke eukalyptus :D. Endlich hab ich verstanden wie das geht. Ich hab mal ein wenig mit dem System herumexperimentiert, und das ist dabei herausgekommen:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIP.au3>
    #include <WinAPI.au3>

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

    ; - Author: name22 (http://www.autoit.de), eukalyptus (original)

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

    Opt("GUIOnEventMode", 1)
    Opt("MouseCoordMode", 2)

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

    ;###-v-SETTINGS-v-###

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

    $iWidth = 800
    $iHeight = 800
    $iDepth = 800
    $iX_Offset = 0
    $iY_Offset = 0
    $fPersp = 0.6

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

    $iARGB_BG = 0xFF000000
    $nFPS = 80

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

    $iX_Vel = 0
    $iY_Vel = 0
    $iZ_Vel = -1000

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

    ;###-^-SETTINGS-^-###

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

    $iW_Rect = Random(60, 300, 1)
    $iH_Rect = $iW_Rect
    $iD_Rect = Random(60, 300, 1)
    $iX_Rect = Random(0, $iWidth - $iW_Rect, 1)
    $iY_Rect = Random(0, $iHeight - $iH_Rect, 1)
    $iZ_Rect = 2000

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

    Global $aWarp_V[5][2] = [[4], [0, 0], [$iWidth / 2 * $fPersp + $iX_Offset, $iHeight / 2 * $fPersp + $iY_Offset], [0, $iHeight], [$iWidth / 2 * $fPersp + $iX_Offset, $iHeight - $iHeight / 2 * $fPersp + $iY_Offset]]
    Global $aWarp_H[5][2] = [[4], [0, $iHeight], [$iWidth, $iHeight], [$iWidth / 2 * $fPersp + $iX_Offset, $iHeight - $iHeight / 2 * $fPersp + $iY_Offset], [$iWidth - $iWidth / 2 * $fPersp + $iX_Offset, $iHeight - $iHeight / 2 * $fPersp + $iY_Offset]]

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

    $nSleepTime = 1000 / $nFPS

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

    $nFPS_Display = 0
    $nFPS_Average = $nFPS

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

    $vNTdll = DllOpen("ntdll.dll")
    $vU32Dll = DllOpen("user32.dll")

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

    $tPrecSleep = DllStructCreate("int64 time;")
    $pPrecSleep = DllStructGetPtr($tPrecSleep)

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

    $hMain = GUICreate("Example by name22", $iWidth, $iHeight)
    GUISetState()

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

    $hDC_Main = _WinAPI_GetDC($hMain)
    $hDC_Buffer = _WinAPI_CreateCompatibleDC($hDC_Main)
    $hBitmap_Buffer = _WinAPI_CreateCompatibleBitmap($hDC_Main, $iWidth, $iHeight)
    _WinAPI_SelectObject($hDC_Buffer, $hBitmap_Buffer)

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

    _GDIPlus_Startup()

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC_Buffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)

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

    $hImageFront = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Front.png")

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

    $hPen_Cube = _GDIPlus_PenCreate(0xFF00FF00)
    $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xFF808080)
    $hBrush_Walls = _GDIPlus_BrushCreateSolid(0xFFF0F0F0)

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

    $hStringFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hStringFormat, 2)
    $hFamily_FPS = _GDIPlus_FontFamilyCreate("Sony Sketch EF")
    $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8)

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

    $aMeasure = _GDIPlus_GraphicsMeasureString($hGraphics, "FPS: 0", $hFont_FPS, _GDIPlus_RectFCreate(), $hStringFormat)
    $tLayout_FPS = _GDIPlus_RectFCreate(0, $iHeight - DllStructGetData($aMeasure[0], "Height"), $iWidth, 0)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close", $hMain)
    OnAutoItExitRegister("_Shutdown")

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

    MouseMove($iWidth / 2, $iHeight / 2, 0)

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

    $aMousePosOld = MouseGetPos()
    $nT_UpdateFPS = TimerInit()
    $nT_Sleep = TimerInit() + $nSleepTime
    While True
    DllStructSetData($tPrecSleep, "time", -10000 * ($nSleepTime - TimerDiff($nT_Sleep)))
    DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
    $nFrameTime = TimerDiff($nT_Sleep)
    $nT_Sleep = TimerInit()

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

    $nFPS_Cur = 1000 / $nFrameTime
    If TimerDiff($nT_UpdateFPS) >= 1000 Then
    $nFPS_Display = $nFPS_Cur
    $nT_UpdateFPS = TimerInit()
    EndIf

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

    $aMousePosNew = MouseGetPos()
    If $aMousePosOld[0] <> $aMousePosNew[0] Or $aMousePosOld[1] <> $aMousePosNew[1] Then
    $iX_Offset = $aMousePosNew[0] - $iWidth / 2
    $iY_Offset = $aMousePosNew[1] - $iHeight / 2
    $aWarp_V[2][0] = $iWidth / 2 * $fPersp + $iX_Offset
    $aWarp_V[2][1] = $iHeight / 2 * $fPersp + $iY_Offset
    $aWarp_V[4][0] = $aWarp_V[2][0]
    $aWarp_V[4][1] = $iHeight - $iHeight / 2 * $fPersp + $iY_Offset
    $aWarp_H[3][0] = $aWarp_V[2][0]
    $aWarp_H[3][1] = $aWarp_V[4][1]
    $aWarp_H[4][0] = $iWidth - $iWidth / 2 * $fPersp + $iX_Offset
    $aWarp_H[4][1] = $aWarp_V[4][1]
    $aMousePosOld = $aMousePosNew
    EndIf

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

    $iX_Rect += $iX_Vel / $nFPS_Cur
    $iY_Rect += $iY_Vel / $nFPS_Cur
    $iZ_Rect += $iZ_Vel / $nFPS_Cur

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

    If $iZ_Rect < 0 Then
    $iW_Rect = Random(60, 300, 1)
    $iH_Rect = $iW_Rect
    $iD_Rect = Random(60, 300, 1)
    $iX_Rect = Random(0, $iWidth - $iW_Rect, 1)
    $iY_Rect = Random(0, $iHeight - $iH_Rect, 1)
    $iZ_Rect = 2000
    EndIf

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

    $hPath_V = _GDIPlus_PathCreate()
    $hPath_H = _GDIPlus_PathCreate()

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

    _GDIPlus_PathAddRectangle($hPath_V, $iZ_Rect, $iY_Rect, $iD_Rect, $iH_Rect)
    _GDIPlus_PathAddRectangle($hPath_H, $iX_Rect, $iZ_Rect, $iW_Rect, $iD_Rect)

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

    _GDIPlus_PathWarp($hPath_V, 0, $aWarp_V, 0, 0, $iDepth, $iHeight)
    _GDIPlus_PathWarp($hPath_H, 0, $aWarp_H, 0, 0, $iWidth, $iDepth)

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

    $aPoints_V = _GDIPlus_PathGetPoints($hPath_V)
    $aPoints_H = _GDIPlus_PathGetPoints($hPath_H)

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

    _GDIPlus_PathDispose($hPath_V)
    _GDIPlus_PathDispose($hPath_H)

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

    _GDIPlus_GraphicsClear($hGraphics, $iARGB_BG)
    _GDIPlus_GraphicsFillPolygon($hGraphics, $aWarp_H, $hBrush_Walls)
    _GDIPlus_GraphicsFillPolygon($hGraphics, $aWarp_V, $hBrush_Walls)
    _GDIPlus_GraphicsDrawPolygon($hGraphics, $aPoints_H, $hPen_Cube)
    _GDIPlus_GraphicsDrawPolygon($hGraphics, $aPoints_V, $hPen_Cube)

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

    ;Punkte Horizontal
    ; 4---3
    ; / \
    ;1------2

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

    ;Punkte Vertikal
    ;1--__
    ;| --2
    ;| |
    ;| __--3
    ;4--

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

    ;Punkte 3D
    ;1----2
    ;|\ |\
    ;| 5----6
    ;4----3 |
    ; \| \|
    ; 8----7

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

    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[1][0], $aPoints_V[4][1], $aPoints_H[2][0], $aPoints_V[4][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[2][0], $aPoints_V[4][1], $aPoints_H[3][0], $aPoints_V[3][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[3][0], $aPoints_V[3][1], $aPoints_H[4][0], $aPoints_V[3][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[4][0], $aPoints_V[3][1], $aPoints_H[1][0], $aPoints_V[4][1], $hPen_Cube)

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

    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[1][0], $aPoints_V[1][1], $aPoints_H[2][0], $aPoints_V[1][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[2][0], $aPoints_V[1][1], $aPoints_H[3][0], $aPoints_V[2][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[3][0], $aPoints_V[2][1], $aPoints_H[4][0], $aPoints_V[2][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[4][0], $aPoints_V[2][1], $aPoints_H[1][0], $aPoints_V[1][1], $hPen_Cube)

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

    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[1][0], $aPoints_V[1][1], $aPoints_H[1][0], $aPoints_V[4][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[2][0], $aPoints_V[1][1], $aPoints_H[2][0], $aPoints_V[4][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[3][0], $aPoints_V[2][1], $aPoints_H[3][0], $aPoints_V[3][1], $hPen_Cube)
    _GDIPlus_GraphicsDrawLine($hGraphics, $aPoints_H[4][0], $aPoints_V[2][1], $aPoints_H[4][0], $aPoints_V[3][1], $hPen_Cube)

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImageFront, $aPoints_H[1][0], $aPoints_V[1][1], Abs($aPoints_H[2][0] - $aPoints_H[1][0]), Abs($aPoints_V[4][1] - $aPoints_V[1][1]))

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

    _GDIPlus_GraphicsDrawStringEx($hGraphics, "FPS: " & Int($nFPS_Display), $hFont_FPS, $tLayout_FPS, $hStringFormat, $hBrush_FPS)
    _WinAPI_BitBlt($hDC_Main, 0, 0, $iWidth, $iHeight, $hDC_Buffer, 0, 0, $SRCCOPY)
    WEnd

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

    Func _Close()
    Exit
    EndFunc ;==>_Close

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

    Func _Shutdown()
    _WinAPI_ReleaseDC($hMain, $hDC_Main)
    _WinAPI_DeleteDC($hDC_Buffer)
    _WinAPI_DeleteObject($hBitmap_Buffer)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImageFront)
    _GDIPlus_BrushDispose($hBrush_FPS)
    _GDIPlus_BrushDispose($hBrush_Walls)
    _GDIPlus_PenDispose($hPen_Cube)
    _GDIPlus_StringFormatDispose($hStringFormat)
    _GDIPlus_FontFamilyDispose($hFamily_FPS)
    _GDIPlus_FontDispose($hFont_FPS)
    _GDIPlus_Shutdown()

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

    DllClose($vNTdll)
    DllClose($vU32Dll)
    EndFunc ;==>_Shutdown

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

    ; #FUNCTION#;===============================================================================
    ;
    ; Name...........: _HighPrecisionSleep()
    ; Description ...: Sleeps down to 0.1 microseconds
    ; Syntax.........: _HighPrecisionSleep( $iMicroSeconds, $hDll=False)
    ; Parameters ....: $iMicroSeconds - Amount of microseconds to sleep
    ; $hDll - Can be supplied so the UDF doesn't have to re-open the dll all the time.
    ; Return values .: None
    ; Author ........: Andreas Karlsson (monoceres)
    ; Modified.......:
    ; Remarks .......: Even though this has high precision you need to take into consideration that it will take some time for autoit to call the function.
    ; Related .......:
    ; Link ..........;
    ; Example .......; No
    ;
    ;;==========================================================================================
    Func _HighPrecisionSleep($iMicroSeconds, $hDll = False)
    Local $hStruct, $bLoaded
    If Not $hDll Then
    $hDll = DllOpen("ntdll.dll")
    $bLoaded = True
    EndIf
    $hStruct = DllStructCreate("int64 time;")
    DllStructSetData($hStruct, "time", -1 * ($iMicroSeconds * 10))
    DllCall($hDll, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct))
    If $bLoaded Then DllClose($hDll)
    EndFunc ;==>_HighPrecisionSleep

    [/autoit]


    Falls ihr wollt, könnt ihr das Bild (oder auch ein komplett anderes) in das Scriptverzeichnis packen (oder den Pfad in Zeile 63 anpassen).

    Bilder

    • Front.png
      • 34,18 kB
      • 300 × 300
  • Bild in GUI in guter Qualität einbinden

    • name22
    • 10. März 2012 um 19:13
    Zitat

    was bestimmt auch gute Ergebnisse liefert!


    Standardmäßig sehen die Bilder danach schon recht gut aus, aber man kann auch mit einer Funktion aus der GDIP.au3 (_GDIPlus_GraphicsSetInterpolationMode) den Modus auf das gewünschte Verfahren setzen. Manche sind schneller aber liefern schlechte Bilder, andere sind langsam aber liefern super Bildqualität. Es gbt auch optimierungen für Verkleinerung bzw. Vergrößerung eines Bildes.

  • GDIplus: Frage zu GraphicsDispose, etc

    • name22
    • 10. März 2012 um 19:10
    Zitat

    und wird nach ein paar Sekunden wieder entfernt.


    Nein. Es wird genau dann entfernt wenn Wndows es will, also wenn du etwas anderes dadrüber Positionierst. Wie z.B. das Auswahlrechteck oder ein Fenster..

    Zitat

    Ich lass es jetzt einfach wie es war und autoit startet das Fenster danach einfach neu.


    Wie denn das?

    Zitat

    Ist immerhin weniger Arbeit als ein transparentes GUI drüber zu legen.


    Nicht wirklich.. An meinem Script müsste man nicht viel anpassen um das zu ändern. Abgesehen davon hätte ich dir dabei auch helfen können.

  • Bild in GUI in guter Qualität einbinden

    • name22
    • 10. März 2012 um 18:33
    Zitat

    in IrfaView gibt es einen speziellen Modus mit Namen: "Speichern fürs Web". Den man als Plugin bekommt. Einen solchen Modus haben die besseren Bildbearbeitungsprogramme auch. 8)


    Und was macht der?

  • Countdown

    • name22
    • 10. März 2012 um 17:55

    Wie wärs mit

    [autoit]

    _DateDiff
    ;+
    @YEAR ;Aktuelles Jahr
    @MON ;Aktueller Monat
    @MDAY ;Aktueler Tag
    @HOUR ;Aktuelle Stunde
    @MIN ;Aktuelle Minute
    ;und
    MsgBox

    [/autoit]


    ? ;)

  • GDI + viel zu langsam ..

    • name22
    • 10. März 2012 um 17:36

    So...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GDIPlus.au3>

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

    $hGUI = GUICreate("Form1", 360, 60, 129, 124)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup ()

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

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

    $hImageProgress = _GDIPlus_ImageLoadFromFile ("C:\Users\Torge\Documents\Jellyfish.jpg") ; Bild, welches als Progressbar benutzt werden soll
    $hImageBG = _GDIPlus_ImageLoadFromFile ("C:\Users\Torge\Documents\Prog.jpg") ; Hintergrundbild, auf dem die Progressbar benutzt werden soll

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

    For $i = 1 to 360
    _GDIPlus_GraphicsSetClipRect($hGraphic, 0, 0, $i, 60) ;Begrenzt den Zeichenbereich der Grafik auf das angegebene Rechteck
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImageBG, 0, 0, 360, 60)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImageProgress, 0, 0, 360, 60)
    Next

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

    OnAutoItExitRegister("_Shutdown") ;Führt _Shutdown vor dem beenden des Scripts aus.

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _Shutdown()
    _GDIPlus_GraphicsDispose($hGraphic) ;Grafik Objekt löschen
    _GDIPlus_ImageDispose($hImageProgress) ;Bild löschen
    _GDIPlus_ImageDispose($hImageBG) ;Bild löschen
    _GDIPlus_Shutdown() ;Standard Ressourcen löschen und DLL Handle schließen.
    EndFunc

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

    ;GDIP.au3 Funcion:
    Func _GDIPlus_GraphicsSetClipRect($hGraphics, $nX, $nY, $nWidth, $nHeight, $iCombineMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRect", "hwnd", $hGraphics, "float", $nX, "float", $nY, "float", $nWidth, "float", $nHeight, "int", $iCombineMode)

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

    If @error Then Return SetError(@error, @extended, False)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetClipRect

    [/autoit]


    Das ist zwar immer noch nicht besonders gut, aber es sollte korrekt funktionieren. Wenn dein bild flackern sollte musst du noch einen Backbuffer einbauen (dazu gibt es ein Tutorial im Forum "GDI+ Tutorial").
    Wenn du dann noch das beachtest was Greenhorn gepostet hat, könnte daraus sogar noch was werden. Dein Bild sollte übrigens die Maße 360x60 Pixel haben (exakt). Sonst bringt das hier keinen Geschwindigkeitsvorteil.

  • GDI + viel zu langsam ..

    • name22
    • 10. März 2012 um 17:15

    Räum mal deinen Code auf, dann sehen wir weiter... Ich hab schon den passenden Befehl dafür.

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™