Funktionsreferenz


GUICtrlCreatePic

Erzeugt ein Bild-Control für die GUI.

GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )

Parameter

filename Dateiname des zu ladenden Bildes. Es werden die Typen BMP, JPG, nicht animierte GIF unterstützt.
left Die linke Seite des Bildes. Wird -1 verwendet, dann wird left mit Hilfe von GUICoordMode berechnet.
top Die Oberkante des Bildes. Wird -1 verwendet, dann wird top mit Hilfe von GUICoordMode berechnet.
width [optional] Die Breite des Bildes (voreingestellt ist die zuvor verwendete Breite).
height [optional] Die Höhe des Bildes (voreingestellt ist die zuvor verwendete Höhe).
style [optional] Legt den Stil des Bild-Controls fest. Siehe Anhang GUI-Stile für Controls.

Standard ( -1) : $SS_NOTIFY
Erzwungene Stile : $BS_BITMAP
exStyle [optional] Legt den erweiterten Stil des Bild-Controls fest. Siehe Tabelle der erweiterten Stile.

Rückgabewert

Erfolg: Gibt die Identifikationsnummer (Control-ID) des neuen Controls zurück.
Fehler: Gibt 0 zurück, falls das Bild nicht erzeugt werden kann.

Bemerkungen

Um Informationen im Control zu setzen oder zu verändern, siehe GUICtrlUpdate....

Nachdem die Dialogbox angezeigt wurde, kann das Bild mit GUICtrlSetImage aktualisiert werden.

Soll das Bild die Größe der Originaldatei haben, setzt man width=height=0.

Um ein transparentes Bild zu erzeugen, ist es erforderlich, dass das GUI-Fenster mit dem erweiterten Stil WS_EX_LAYERED erzeugt wird. Das oberste linke Pixel wird hierbei als "transparente Farbe" benutzt. Werden mehrere Bilder erzeugt, bestimmt das letzte Bild die "transparente Farbe". Siehe Beispiel 2.

Um weitere Stile zusätzlich zum Standardstil zu verwenden, benutzt man BitOr($GUI_SS_DEFAULT_PIC, newstyle,...).

Um die oben angegebenen Werte verwenden zu können, muss #include <StaticConstants.au3> in das Skript eingefügt werden.

Als Standard für das Verhalten des Controls (bzgl. Größe und/oder Position) bei Größenänderung der GUI gilt $GUI_DOCKSIZE. (Größe wird nicht geändert.)
Mögliche Resizing-Parameter siehe GUICtrlSetResizing.

Wird ein Bild als Hintergrundbild genutzt, während die anderen Controls dieses quasi überlappen, so ist es wichtig, das Bild-Control zu deaktivieren und es nach den anderen Controls zu erstellen: GuiCtrlSetState(-1,$GUI_DISABLE). Dies funktioniert aber nicht mit Tab-Controls, die anders arbeiten. In dem Fall muss man das Bild mit dem Stil $WS_CLIPSIBLINGS erstellen. GuiCtrlSetState(-1,$GUI_ONTOP) ist für die Tab, TreeView oder ListView-Controls notwendig.

Der erweiterte Stil $GUI_WS_EX_PARENTDRAG kann für das Ziehen von Fenstern benutzt werden, die keine Titelleiste besitzen (kein $WS_CAPTION Stil in GUICreate).

Der Hintergrund ist immer auf transparent gesetzt. GUICtrlSetBkColor() hat auf Bild-Controls keinen Effekt.

PNG kann mit GDI+ verwendet werden. Siehe Beispiel 3.

- - - - - - - - Erklärung der Controls - - - - - - - -

Verwandte Funktionen

GUICoordMode (Option), GUICtrlSetImage, GUICtrlUpdate..., GUIGetMsg

Beispiel


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

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- Beispiel 1 ----
Func Example1()
    Local $n, $msg

    GUICreate("Meine GUI mit Bild", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird.

    GUISetBkColor(0xE0FFFF)
    $n = GUICtrlCreatePic("..\GUI\mslogo.jpg", 50, 50, 200, 50)

    GUISetState()

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    ; Verändere die Größe des Controls
    GUICtrlSetPos($n, 50, 50, 200, 100)
    GUICtrlSetImage($n, "..\GUI\mslogo.jpg")

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    GUIDelete()
EndFunc   ;==>Example1

;----- Beispiel 2
Func Example2()
    Local $msg

    $gui = GUICreate("Test transparentes Bild", 200, 100)
    $pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic("..\GUI\merlin.gif", 0, 0, 0, 0)

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $gui)

    HotKeySet("{ESC}", "main")
    HotKeySet("{LEFT}", "left")
    HotKeySet("{RIGHT}", "right")
    HotKeySet("{DOWN}", "down")
    HotKeySet("{UP}", "up")
    $picPos = WinGetPos($pic)
    $guiPos = WinGetPos($gui)

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

    HotKeySet("{ESC}")
    HotKeySet("{LEFT}")
    HotKeySet("{RIGHT}")
    HotKeySet("{DOWN}")
    HotKeySet("{UP}")
EndFunc   ;==>Example2

Func main()
    $guiPos = WinGetPos($gui)
    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc   ;==>main

Func left()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc   ;==>left

Func right()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc   ;==>right

Func down()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc   ;==>down

Func up()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc   ;==>up

;----- Beispiel 3 wie das ganze auch mit PNG funktioniert (von Zedna)
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; GUI erstellen
$hGUI = GUICreate("PNG zeigen", 250, 250)

; PNG Bild laden
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile("..\GUI\Torus.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Ressourcen aufräumen
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

; PNG Bild zeichnen
Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    #forceref $hWnd, $Msg, $wParam, $lParam
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_PAINT