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

  • gdi+ text

    • name22
    • 22. Juni 2012 um 23:15

    Das kannst du über das StringFormat einstellen. Um den Text horizontal kannst du _GDIPlus_StringFormatSetAlign benutzen. Für die vertikale Ausrichtung braucht man allerdings eine Funktion namens _GDIPlus_StringFormatSetLineAlign aus der GDIP.au3 (nicht in den Standard-Includes). In der GDIP.au3 gibt es übrigens noch mehr solcher nützlicher Funktionen, kannst du dir ja mal anschauen (einfach per google suchen). Ich hab mal das Beispiel aus der Hilfe modifiziert damit es den Text vertikal sowie horizontal zentriert.

    Spoiler anzeigen
    [autoit]

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

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

    Local $hWnd = GUICreate("GDI+ Example", 400, 300)
    GUISetState()

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

    _GDIPlus_Startup()
    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    _GDIPlus_GraphicsClear($hGraphics)

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

    Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF009900)
    Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    Local $hFont = _GDIPlus_FontCreate($hFamily, 36)
    Local $hLayout = _GDIPlus_RectFCreate(0, 0, 400, 300)
    Local $hStringFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hStringFormat, 1)
    _GDIPlus_StringFormatSetLineAlign($hStringFormat, 1)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, "AutoIt Rocks", $hFont, $hLayout, $hStringFormat, $hBrush)

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

    Do
    Local $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_StringFormatDispose($hStringFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GDIPlus_StringFormatSetLineAlign
    ; Description ...: Sets the line alignment of a StringFormat object in relation to the origin of a layout rectangle
    ; Syntax.........: _GDIPlus_StringFormatSetLineAlign($hStringFormat, $iStringAlign)
    ; Parameters ....: $hStringFormat - Pointer to a StringFormat object
    ; $iStringAlign - Type of line alignment to use:
    ; |0 - Alignment is towards the origin of the bounding rectangle
    ; |1 - Alignment is centered between origin and the height of the formatting rectangle
    ; |2 - Alignment is to the far extent (right side) of the formatting rectangle
    ; Return values .: Success - True
    ; Failure - False and either:
    ; |@error and @extended are set if DllCall failed
    ; |$GDIP_STATUS contains a non zero value specifying the error code
    ; Remarks .......: The line alignment setting specifies how to align the string vertically in the layout rectangle.
    ; The layout rectangle is used to position the displayed string
    ; Related .......: _GDIPlus_StringFormatGetLineAlign
    ; Link ..........; @@MsdnLink@@ GdipSetStringFormatLineAlign
    ; Example .......; No
    ; ===============================================================================================================================
    Func _GDIPlus_StringFormatSetLineAlign($hStringFormat, $iStringAlign)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetStringFormatLineAlign", "hwnd", $hStringFormat, "int", $iStringAlign)

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

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

    [/autoit]
  • augegraute menüpunkte

    • name22
    • 22. Juni 2012 um 16:07

    Mir entgeht der Sinn des Ganzen. Das Programm wird doch wohl einen guten Grund haben das Control zu deaktivieren... Außerdem kann es sein, dass selbst nach einer reaktivierung des Eintrags kein Speichern möglich ist, weil das Programm das Menü-Control sowieso nicht abfragt.

    Das ist außerdem zu wenig Information... Wenn es sich nicht um ein Standard Menü-Control handelt, dann musst du uns schon sagen was es sonst ist (oder zumindest ein paar Daten darüber angeben, wie Classname, Screenshot etc.). Der Name des Programms wäre auch hilfreich. Im allgemeinen lassen sich, mit AutoIt kompatible, Controls per ControlEnable reaktivieren, bei Einträgen eines Menü-Controls bin ich mir nicht sicher. Vielleicht hat das Programm aber auch noch andere Schnittstellen als das Menü in der GUI.

  • Alina hat Geburtstag

    • name22
    • 19. Juni 2012 um 13:53

    Alles Gute zum Geburtstag Alina :thumbup: .

  • L3viathan hat die 20 erreicht!

    • name22
    • 17. Juni 2012 um 13:59

    Happy Brithday L3viathan! :thumbup:
    Ich wünsch dir einen schönen 20ten Geburtstag und alles Gute im neuen Lebensjahr. ;)

  • Imaginäre Zahlen in AutoIt

    • name22
    • 16. Juni 2012 um 22:28

    Wie gesagt, ich glaube nicht, dass die Funktionen damit umgehen können, daher müsstest du vermutlich einen Großteil davon anpassen indem du deine eigene Funktion um die alten Funktionen herum aufbaust.

  • Imaginäre Zahlen in AutoIt

    • name22
    • 16. Juni 2012 um 22:20

    Ich nehme an die Zahl der Programmiersprachen die von Haus aus imaginäre Zahlen unterstützen tendiert gegen 0...
    Imaginäre Zahlen heißen nicht umsonst so. ^^ Die standardoperatoren und alle Funktionen für Zahlen können mit sowas nicht umgehen.
    Im besten Fall erhältst du jede Menge Fehlermeldungen. Ich bin mir relativ sicher, dass du alle nötigen Operationen auf selbstgeschriebene Funktionen auslegen musst die kompatibel mit diesen Zahlen sind. Die Zahlen selbst wirst du wahrscheinlich in Arrays speichern müssen.

    Edit: Zu spät...

  • gdiplus

    • name22
    • 11. Juni 2012 um 18:49

    SEuBo Du böser du! :whistling: Wieso böse? Ich hätte nur keine Lust gehabt ein Beispiel zu schreiben, sonst hätte ich das auch gemacht ^^.

  • gdiplus

    • name22
    • 10. Juni 2012 um 21:13
    Zitat

    nur wo bring ich den her?


    Wo wird denn in dem Programm gezeichnet? Nicht direkt in die GUI. Zuerst wird alles in eine Bitmap im Speicher gezeichnet und diese Bitmap wird danach auf die GUI gebracht. Wenn du Zeile 81 auskommentierst, siehst du nichts auf der GUI, aber wenn das Bild gespeichert wird ist der Inhalt immer noch da. Die Funktion _BitmapCreateFromGraphics erstellt eine Bitmap im Speicher in die du zeichnen kannst und die du in Dateien speichern kannst. Die Bitmap wird zwar aus der Graik der GUI generiert, aber zu den Eigenschaften die daraus übernommen werden gehört nicht die Größe. Die Bitmap kannst du (bis zu einem gewissen Limit) so groß machen wie du willst, unabhängig von der Größe der GUI. Dafür sind die ersten beiden Parameter der Funktion da.
    Also erstellst du jetzt einfach eine Bitmap die die gewünschte Größe hat und zeichnest beide Bilder an die gewünschte Position. Eine neu erstellte Bitmap ist immer transparent (jeder Pixel hat den Farbwert 0), aber wenn du die Transparenz erhalten möchtest, musst du sie in einem entsprechenden Format wie z.B. .png speichern.

  • Grafische Buttons -> Bilder -> Wo / Wie ?

    • name22
    • 9. Juni 2012 um 23:11

    Das scheint mir hier ein bisschen Fehle am Platze zu sein... Normalerweise geht es hier um Support für AutoIt Scripte. Das hier gehört eher in Off-Topic oder so.

  • m-obi wird 24!

    • name22
    • 9. Juni 2012 um 12:36

    Happy Birthday m-obi. Feier schön und hab viel Spaß an diesem sonnigen Tag ;).

  • Syntax error

    • name22
    • 7. Juni 2012 um 19:09

    Weil das kein Syntax Fehler ist... Das könnte man als falsche Adressierung eines Datenspeichers klassifizieren. Aber es ist kein Syntax Fehler.
    Das hier ist auch völlig korrekt von der Syntax her: MsgBox(0, "", $Test)
    Aber bei der Ausführung wird trotzdem ein Error angezeigt, weil die Variable nicht existiert. ;)

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 7. Juni 2012 um 16:32

    Ich würde an deiner Stelle mal checken, ob derartiges automatisieren der Webseite in deren AGB erlaubt ist. Falls nicht, hat auch das hier nichts verloren.

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 7. Juni 2012 um 16:16

    Die Dikussion hat hier aber nun wirklich nichts verloren... Das würde wenn dann in Off-Topic gehören, aber eigentlich hat das nicht mal was in diesem Forum verloren find ich. ;)

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 7. Juni 2012 um 15:43

    Ich würde an deiner Stelle mal JDownloader ausprobieren.

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 6. Juni 2012 um 14:26
    Zitat

    Am besten wäre wohl ein asynchroner Schreibvorgang mit WinAPI-Funktionen.


    Mag sein. Aber wie stellst du dir das vor? Kannst du vielleicht die nötigen Funktionen nennen? Ich würde gerne versuchen das mal einzubauen.

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 6. Juni 2012 um 13:46
    Zitat

    Der Dateiname wird manchmal im Content-Disposition Header per filename-Parameter mitgeliefert.


    Cool, das wusste ich noch nicht :).

    Zitat

    Erst mal kannst du die URL auch per _WinHttpCrackUrl in die Einzelteile zerlegen, statt eigene Regex und Stringfunktionen zu verwenden.


    Mach ich ja auch... Das mit dem Dateinamen hab ich nur schnell zusammengebastelt. Wenn er da was anderes haben will kann er es ja so machen. ;)

    Zitat

    Bei großen Dateien ist außerdem das sofortige Schreiben in eine Datei sinnvoll statt die Daten im Arbeitsspeicher zusammenzubauen.


    Das ist mir auch klar, aber das Problem ist wieder einmal AutoIt. Wenn ich jedes 8192KB Datenpaket direkt in die Datei schreiben lasse, dann wird der Download abnormal verlangsamt (bei mir teilweise auf weit unter 100KB/s obwohl das Limit höher ist. Ich hab halt keine SSD ^^).
    Man könnte jetzt entweder mit größeren Datenpaketen experimentieren (das könnte aber auch eisfreaks Bandbreite für längere Zeit beanspruchen), oder man könnte die Downloadpakete kleiner machen als die Pakete die in die Datei geschrieben werden (also FileWrite nicht bei jedem Schleifendurchgang aufrufen).

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 6. Juni 2012 um 00:21

    Also bei mir ist 740KB/s maximum wenn ich 1024*1024 angebe. Vielleicht sind 100KB/s dann dein maximum.... An was genau das jetzt liegt weiß ich nicht. Meine CPU ist doppelt so schnell, aber das kann nicht der einzige Grund sein. Versuch mal die Zeilen mit dem Sleep und $nT etc. auszukommentieren und schau dir dann mal die Werte an.

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 5. Juni 2012 um 23:43
    Zitat

    Aber warum benutzt du nicht einfach sleep statt dem Dllcall?


    Sleep ist ungenauer und bei allem unter 10ms erst recht.

    Zitat

    Es war auf ein Limit von 1mb/s ausgelegt, hat aber nur mit 100kb/s geladen


    Was hast du denn als Zahl für das Limit eingegeben? Und was hast du für einen Prozessor? Bei meiner 4GHz CPU sind 500 als Limit kein Ding, obwohl AutoIt nur einen der 4 Kerne nutzen kann.

    Zitat

    Ein Problem an dem Script wäre auch das der Dateiname nicht im Link enhalten ist (das ganze läuft über eine ID).


    Den kannst du ja selbst festlegen.

    Zitat

    Kennst du vielleicht einen über Parameter steuerbaren Downloader der in einer effektiveren Programmiersprache geschrieben ist?


    Da fällt mir nur noch das Firefox Add-On DownThemAll ein. Da kannst du die Downloadgeschwindigkeit begrenzen.
    Aber sowas gibt es bestimmt, befrag mal Google. Falls die nichts wissen kann dir vielleicht noch jemand anders aus dem Forum helfen ;).

  • Limit download speed, Dateinamen herausfinden (InetGet, WinHttp, TCP?)

    • name22
    • 5. Juni 2012 um 23:13

    Der extrem hohe CPU Verbrauch kommt von AutoIts schlechten Performanceverhältnissen. AutoIt ist nunmal eine Interpretersprache und stößt bei stark geschwindigkeitsabhängigen Anwendungen schnell an die Grenzen.
    Ein niedrigeres Speedlimit schont die CPU eher, weil hier der Prozessor größtenteils im leerlauf ist (wegen den langen Sleep-zeiten).
    AutoIt dürfte aus oben genannten Gründen vielleicht eher nicht für deine Zwecke geeignet sein (wenn du ein Limit über 500 anstrebst).
    Falls dir das nichts ausmacht, hab ich hier noch eine korrigierte Version (wenn AutoIt nicht schneller als das Downloadlimit gearbeitet hat, wurde eine negative Zahl an die Sleep Funktion gesendet). Außerdem hab ich den Code kommentiert.

    Spoiler anzeigen
    [autoit]

    #include <WinHTTP.au3>
    #include <Array.au3>

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

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

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

    $nSpeedLimit = 1024 * 100 ;Bytes per Second
    $iBytesPerStep = 8192 ;Number of Bytes read every iteration - does not affect speed
    $iSleepTime = Round($iBytesPerStep / $nSpeedLimit * 1000) ;Die Zeit die jeder Durchgang minimal benötigen muss um die Geschwindigkeit nicht zu überschreiten

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

    $sURL_Download = 'http://speedtest.qsc.de/100MB.qsc'
    $sPathDst = @DesktopDir

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

    $vNTdll = DllOpen("ntdll.dll") ;Öffnet die NTDll die eine Funktion zum pausieren eines Prozesses enthält

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

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

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

    $aURL_Split = _WinHttpCrackUrl($sURL_Download) ;URL in Bestandteile zerlegen

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

    $hOpen = _WinHttpOpen() ;WinHTTP session starten
    $hConnect = _WinHttpConnect($hOpen, $aURL_Split[2]) ;Mit Server vebinden
    $hRequest = _WinHttpOpenRequest($hConnect, "GET", $aURL_Split[6]); GET Request für Datei erstellen

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

    _WinHttpSendRequest($hRequest) ;Request senden
    _WinHttpReceiveResponse($hRequest) ;Antwort abwarten

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

    $iSizeBytes = _WinHttpQueryHeaders($hRequest, $WINHTTP_QUERY_CONTENT_LENGTH) ;Content-Length (Dateigröße in diesem Fall) aus Responseheader auslesen

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

    $nT2 = TimerInit()
    Switch _WinHttpQueryDataAvailable($hRequest) ;Wenn Daten verfügbar sind...
    Case True
    $vData = Binary("") ;Leeren Binärstring initialisieren
    $nT = TimerInit()
    Do
    $iSleepTemp = ($iSleepTime - TimerDiff($nT))
    If $iSleepTemp > 0 Then ;Damit die Funktion keine negative Zeit als Parameter empfängt (ich bin mir nicht sicher wie die Funktion reagiert, da sie kaum dokumentiert ist...)
    DllStructSetData($tPrecSleep, "time", -10000 * $iSleepTemp) ;Legt die Zeit die gewartet werden soll fest
    DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep) ;Pausiert den Prozess für eine bestimmte Zeit
    EndIf
    $nT = TimerInit() ;Timer um zu beobachten wie lange der DLL Call benötigt.
    $vData &= _WinHttpReadData($hRequest, 2, $iBytesPerStep) ;Liest ein Datenpaket der angegebenen Größe aus

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

    Until @error ;Download fertig, keine Daten mehr auslesbar

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

    $hFile = FileOpen($sPathDst & "\" & StringTrimLeft($aURL_Split[6], StringInStr($aURL_Split[6], "/", 0, -1)), 18) ;Datei wird im Binärmodus erstellt/geöffnet und nach Originaldatei auf dem Server benannt
    FileWrite($hFile, $vData) ;Daten in Datei schreiben
    FileClose($hFile)

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

    _WinHttpCloseHandle($hRequest)
    _WinHttpCloseHandle($hConnect)
    _WinHttpCloseHandle($hOpen)

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

    MsgBox(64, "Info", "Download completed." & @CRLF & "Time: " & Int(TimerDiff($nT2)) & @CRLF & "Speed: " & Round($iSizeBytes / Int(TimerDiff($nT2))))
    Case False
    MsgBox(16, "Error", "No Data available.")
    EndSwitch

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

    DllClose($vNTdll) ;Dll schließen

    [/autoit]


    Hier hab ich die Geschwindigkeit auf 100KB/s festgelegt. Laut meiner Firewall hält das Programm diese Grenze auch relativ genau ein, aber mit nur 100KB/s dauert das natürlich ewig ^^.
    Es könnte bei größeren Dateien aber ein weiteres Problem auftreten... Die gesamten heruntergeladenen Daten werden zuerst im Arbeitsspeicher gesammelt und dann in eine Datei geschrieben. Ich hab zwar 8GB Arbeitsspeicher, aber wenn ich jetzt eine Datei runterladen würde die größer als 8 GB ist verlangsamt das den ganzen PC (dann wird nämlich in die Auslagerungsdatei geschrieben... Von allen Prozessen...). Das lässt sich relativ leicht ändern, indem man ein RAM Limit festlegt nach dem die Daten erstmal in die Datei geschrieben und aus dem RAM gelöscht werden. Aber da ich nicht weiß ob du überhaupt noch interesse hast, warte ich lieber bevor ich jetzt mein Beispiel umschreibe.

  • GDI+ und Controls

    • name22
    • 5. Juni 2012 um 22:34

    Sorry, ich hab deinen Thread irgendwie vergessen... ^^
    Problem gelöst:

    Spoiler anzeigen
    [autoit]

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

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

    _GDIPlus_Startup ()
    Opt ("GUIOnEventMode", 1)

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

    Global Const $i_WIDTH = 640, $i_HEIGHT = 680

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

    Global $h_Gui = GUICreate ("", $i_WIDTH, $i_HEIGHT)
    Global $h_Input = GUICtrlCreateInput ("", 36, 623, 564, 14, Default, 0x00000020)

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

    Global $h_Graphic = _GDIPlus_GraphicsCreateFromHWND ($h_Gui)
    Global $h_Bitmap = _GDIPlus_BitmapCreateFromGraphics ($i_WIDTH, $i_HEIGHT, $h_Graphic)
    Global $h_Backbuffer = _GDIPlus_ImageGetGraphicsContext ($h_Bitmap)

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

    Global $h_Dummy1 = _GDIPlus_ImageLoadFromFile ('dummylayer1.png')
    Global $h_Dummy2 = _GDIPlus_ImageLoadFromFile ('dummylayer2.png')

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

    GUICtrlSetState ($h_Input, 32) ; 32 == $GUI_HIDE
    ;_GDIPlus_GraphicsSetClipRect ($h_Backbuffer, 36, 623, 564, 14, 3)

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

    GUIRegisterMsg (0x000F, "WM_PAINT")
    GUISetOnEvent (-3, "_Exit", $h_Gui)
    GUISetOnEvent (-7, "_PrimaryDown", $h_Gui)
    OnAutoItExitRegister ("_OnExit")
    GUISetState (@SW_SHOW, $h_Gui)

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

    While Sleep (25)
    _GDIPlus_GraphicsClear ($h_Backbuffer, 0xFF00FF00)
    _GDIPlus_GraphicsDrawImage ($h_Backbuffer, $h_Dummy1, 0, 0)
    _GDIPlus_GraphicsDrawImage ($h_Backbuffer, $h_Dummy2, 0, 0)
    _WinAPI_RedrawWindow ($h_Gui, 0, 0, $RDW_INTERNALPAINT)
    WEnd

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

    Func _PrimaryDown ()
    Local $a_Pos = GUIGetCursorInfo ($h_Gui)
    If IsArray ($a_Pos) Then
    Select
    Case _InRect ($a_Pos, 36, 623, 564, 14)
    GUICtrlSetState ($h_Input, 16) ; 16 == $GUI_SHOW
    _GDIPlus_GraphicsClear ($h_Backbuffer, 0)
    _GDIPlus_GraphicsSetClipRect ($h_Backbuffer, 36, 623, 564, 14, 3) ; <== Funktioniert nicht so, wie geplant.
    EndSelect
    EndIf
    EndFunc ;==> _PrimaryDown

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

    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)
    If @error Then Return SetError (@error, @extended, False)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[0] = 0
    EndFunc ;==> _GDIPlus_GraphicsSetClipRect

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

    Func _InRect ($aPoint, $iXRect, $iYRect, $iWidthRect, $iHeightRect)
    If $aPoint[0] >= $iXRect And $aPoint[1] >= $iYRect And $aPoint[0] <= $iXRect + $iWidthRect And $aPoint[1] <= $iYRect + $iHeightRect Then Return 1
    Return 0
    EndFunc ;==> _InRect

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

    Func WM_PAINT ()
    _GDIPlus_GraphicsDrawImageRect ($h_Graphic, $h_Bitmap, 0, 0, $i_WIDTH, $i_HEIGHT)
    EndFunc ;==> WM_PAINT

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

    Func _Exit ()
    Exit
    EndFunc ;==> _Exit

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

    Func _OnExit ()
    _GDIPlus_GraphicsDispose ($h_Graphic)
    _GDIPlus_GraphicsDispose ($h_Backbuffer)
    _GDIPlus_BitmapDispose ($h_Bitmap)
    _GDIPlus_Shutdown ()
    EndFunc ;==> _OnExit

    [/autoit]


    SetClipRect beeinflusst alle Funktionen die auf diese Grafik zugreifen, nicht die Grafik selbst. In deinem Fall wird die Bitmap vor der Funktion bereits komplett ausgemalt. Wenn du jetzt eine neue ClipRegion für den Backbuffer (die Grafik der Bitmap) festlegst, wird nichts mehr in diesem Bereich gezeichnet, aber die Bitmap ist an dieser Stelle trotzdem noch ausgefüllt. Du hast zwar einen Bereich der Grafik sozusagen gesperrt, aber nicht wieder auf transparent gesetzt (nur komplett transparente Bereiche (Alphachannel = 0) beeinflussen die Controls nicht). Du musst lediglich ein _GraphicsClear($h_Backbuffer, 0) VOR SetClipRect einfügen, das setzt alle Pixel der Grafik auf die Farbe 0x00000000, also schwarz und komplett transparent.

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™