OwnStyle-UDF (old Aero) V2.3 (Final)

  • Geändert: Übersichtlicher (umgeschrieben):
    So, ich veröffentliche jetzt hier meine OwnStyle-UDF (old Aero). Damit kann man GUIs erstellen, die mehr Design haben als die normalen WinXP-GUIs :D. Man kann das Design per Funktionen ändern und setzen und selber ein Design entwerfen und draufzeichnen.


    Für die UDF habe ich außerdem eine davor von mir erstellte (bis jetzt unveröffentliche) UDF erstellt:

    GUIT
    [autoit]


    #include-once
    #include <GDIPlus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsex.au3>

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

    Global $Var__tSize,$Var__tBlend,$Var__tSource

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

    ;~ $gui=_CreateGUIT("Test",100,100,$WS_SYSMENU,0)
    ;~ GUISetState()
    ;~ _GDIPlus_GraphicsFillEllipse($gui[5],0,0,100,100)
    ;~ _DrawonGUIT($gui)
    ;~ while GUIGetMsg()<>-3
    ;~ Sleep(10)
    ;~ WEnd
    ;~ _DeleteGUIT($gui)
    ;~ _GDIPlus_Shutdown()

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

    Func _CreateGUIT($Var__title="",$Var__width=400,$Var__height=400,$Var__style=0,$Var__exstyle=0,$Var__parent=0)
    Local $Var__gui[9];GUI,ScreenDC,DC,Graphics,Buffer,Backbuffer,Size,Point,Blend
    _GDIPlus_Startup()
    $Var__gui[0]=GUICreate($Var__title,$Var__width,$Var__height,-1,-1,BitOR($WS_POPUP,$Var__style),BitOR($WS_EX_LAYERED,$Var__exstyle),$Var__parent)
    $Var__gui[1]=_WinAPI_GetDC($Var__gui[0])
    $Var__gui[2]=_WinAPI_CreateCompatibleDC($Var__gui[1])
    $Var__gui[3]=_GDIPlus_GraphicsCreateFromHWND($Var__gui[0])
    $Var__gui[4]=_GDIPlus_BitmapCreateFromGraphics($Var__width,$Var__height,$Var__gui[3])
    $Var__gui[5]=_GDIPlus_ImageGetGraphicsContext($Var__gui[4])
    _GDIPlus_GraphicsSetSmoothingMode($Var__gui[5],4) ;bringt das etwas?
    $Var__tSize = DllStructCreate($tagSIZE)
    $Var__gui[6] = DllStructGetPtr($Var__tSize)
    DllStructSetData($Var__tSize, "X", $Var__width)
    DllStructSetData($Var__tSize, "Y", $Var__height)
    $Var__tSource = DllStructCreate($tagPOINT)
    $Var__gui[7] = DllStructGetPtr($Var__tSource)
    $Var__tBlend = DllStructCreate($tagBLENDFUNCTION)
    $Var__gui[8] = DllStructGetPtr($Var__tBlend)
    DllStructSetData($Var__tBlend, "Alpha", 255)
    DllStructSetData($Var__tBlend, "Format", 1)
    ;GUISetState(@SW_SHOW,$Var__gui[0])
    Return $Var__gui
    EndFunc

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

    Func _DrawonGUIT($Var__theguiarray);GUI-0,ScreenDC-1,DC-2,Graphics-3,Buffer-4,Backbuffer-5,Size-6,Point-7,Blend-8
    if not isarray($Var__theguiarray) then return seterror(1,0,0)
    Local $Var__hbmp=_GDIPlus_BitmapCreateHBITMAPFromBitmap($Var__theguiarray[4])
    _WinAPI_SelectObject($Var__theguiarray[2], $Var__hbmp)
    _WinAPI_UpdateLayeredWindow($Var__theguiarray[0], $Var__theguiarray[1], 0, $Var__theguiarray[6], $Var__theguiarray[2], $Var__theguiarray[7], 0, $Var__theguiarray[8], 2)
    _WinAPI_DeleteObject($Var__hbmp)
    Return SetError(0,0,1)
    EndFunc

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

    Func _DeleteGUIT(ByRef $Var__theguiarray)
    if not isarray($Var__theguiarray) then return seterror(1,0,0)
    $Var__theguiarray[8]=0
    $Var__theguiarray[7]=0
    $Var__theguiarray[6]=0
    _GDIPlus_GraphicsDispose($Var__theguiarray[5])
    _GDIPlus_BitmapDispose($Var__theguiarray[4])
    _GDIPlus_GraphicsDispose($Var__theguiarray[3])
    _WinAPI_DeleteDC($Var__theguiarray[2])
    _WinAPI_ReleaseDC($Var__theguiarray[0],$Var__theguiarray[1])
    GUIDelete($Var__theguiarray[0])
    ReDim $Var__theguiarray[1]
    ;_GDIPlus_Shutdown()
    Return SetError(0,0,1)
    EndFunc

    [/autoit]

    Und nun ein Beispiel, gefolgt von der UDF (dieses Beispiel ist alt, benutzt also noch den alten Style):

    Beispiel
    [autoit]


    #include <Aero.au3>

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

    _GDIPlus_Startup() ;Muss nicht, macht _AeroCreate
    $gui=_AeroCreate("Hallo",400,400,"D:\Downloads\Hintergrund.jpg")
    _AeroSetIcon($gui,"D:\Downloads\Cross.png")
    _AeroSetTitle($gui,"Hallo Titel")
    ;_AeroMove($gui,0,0)
    GUISetState()
    $wa=_AeroWorkAreaCreate($gui,0,0,100,20,@SW_HIDE)
    $b=GUICtrlCreateButton("Test",0,0,100,20)
    _AeroWorkAreaSetState($wa,@SW_SHOW)
    $img=_GDIPlus_ImageLoadFromFile("D:\Downloads\Hintergrund.jpg")
    _GDIPlus_GraphicsDrawImageRect($gui,$img,0,25,400,400)
    _GDIPlus_ImageDispose($img)
    _AeroUpdate($gui)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $b
    MsgBox(0,"","")
    EndSwitch
    Sleep(10)
    WEnd

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

    _AeroWorkAreaDelete($wa)
    _AeroDelete($gui)
    _GDIPlus_Shutdown() ;Muss, macht _AeroDelete NICHT

    [/autoit]


    ~~UDF zu groß geworden~~ (Download)
    {Wer ungebrauchte Variablennamen braucht, Replaced alle $ mit z.B. $BlaBla__b_}

    Dieses Beispiel ist neu und benutzt einen neuen eigenen Style

    Beispiel
    [autoit]


    ;~ #NoTrayIcon
    #include <Aero.au3>
    _GDIPlus_Startup() ;Muss nicht, macht _AeroCreate
    $gui=_AeroCreate("Hallo",400,400,".\ICONS\Arbeitsplatz.ico",1)
    GUISetState()
    $wa=_AeroWorkAreaCreate($gui,0,0,99,18,@SW_HIDE)
    $b=GUICtrlCreateButton("Test",-1,-1,100,20)
    _AeroWorkAreaSetState($wa,@SW_SHOW)
    ;Style Test
    $size=_AeroGetSize($gui)
    $style=_AeroStyleCreate(_Array2(0,0),_Array2(0,0),_Array2(0,$size[0]),_Array2(25,$size[1]),_Array2(0x77AAAAAA,0xDD00FF00),_Array2(0xEE555555,0xDD0000FF),0)
    _AeroStyleDraw($gui,$style)
    $style2=_AeroStyleCreate($size[0],300,$size[1],0xAAAAAAAA,0xDDAAAAAA,0xEEAAAAFF,4)
    ;~ _AeroStyleDraw($gui,$style2)
    $img=_GDIPlus_ImageLoadFromFile("D:\Downloads\Bg.png")
    _AeroBgImage($gui,$img)
    _GDIPlus_ImageDispose($img)
    $img=_GDIPlus_ImageLoadFromFile("D:\Downloads\Cross.png")
    ;~ _AeroDrawImage($gui,$img,50,50,100,100)
    ;~ _AeroFillImage($gui,$img)
    _GDIPlus_ImageDispose($img)
    ;
    Sleep(1000)
    _AeroSetTrans($gui,100)

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

    While 1
    $msg=GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $b
    MsgBox(0,"","")
    EndSwitch
    Sleep(10)
    WEnd

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

    _AeroStyleDelete($style)
    _AeroStyleDelete($style2)

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

    _AeroWorkAreaDelete($wa)
    _AeroDelete($gui)
    _GDIPlus_Shutdown() ;Muss, macht _AeroDelete NICHT

    [/autoit]

    Screenshots:
    autoit.de/wcf/attachment/10631/autoit.de/wcf/attachment/10643/autoit.de/wcf/attachment/10686/autoit.de/wcf/attachment/10687/

    Volle Zip im Anhang (jetzt auch wieder das Beispiel drin ;))

    Alle Art von Antworten erwünscht :)
    mfg

    EDIT: {vorherige EDITs gelöscht, der Übersicht wegen}
    Update [DL 46] <- Danke für alle Downlaods :)

    Info für die Funktion _AeroStyleCreate:
    Die Parameter (außer Mode) sind die von _GDIPlus_LineBrushCreate, aber wenn Arrays übergeben werden (brauch man bei Mode 0), dann werden damit 2 Brushs erstellt (also $X[0] z.B. gehört zum ersten Brush, $x[1] dann zum zweiten)

    Neue Version:
    Aerostyle - Mode 4 kann jetzt 3 farbige LineBrushs verwenden (siehe 2. Screenshot) (Idee von Ludwigs Unicalc)
    -Bug mit Mode 2 berichtigt

    Hoffe es gefällt euch

    EDIT:
    Update [DL7]
    Man kann jetzt Bilder als Hintergrund nehmen, die Buttons habe ich ein wenig beichtigt man kann runde oder eckige Kanten auswählen und noch ein paar Bugs beseitigt. Gegen die Prozessorleistung könnt ihr wenn igr wollt Adlibregeister _AeroProc auf weniger als 20 MS setzen, allerdings reagiert der Button usw dann nicht so schnell
    2 neue Screenshots:
    1 hat als Hintergrund ein Bild, das 2. auch, aber auch andere Bilder draufgemalt, einmal gefüllt und einmal gemalt (siehe Beispiel). Ich schätze das wird so ziemlich die Final, man kann ja jetzt so ziemlich viel machen:
    -Bilder fürs Design
    -Farben fürs Design
    -eine Farbe als Design
    -eckig/rund
    -Transparenz (farblich und/oder das ganze Fenster)

  • Bei GDIP.au3 die ich mir gedownloadet habe krieg ich nur errors, uplaode mal ALLES was nötig ist um das programm zu starten, ich denke mal wenn sich dieses udf weiterentwickelt dann wirds ganz gros rauskommen :D

  • Sehr gut gemacht :thumbup:

    Schön wäre es noch wenn der Button sofort mitwandert.

    mfg Ubuntu

  • Ja mit den Buttons ist mir auch aufgefallen, das war blöd, mal sehen was sich da machen lässt.


    Erstelle sie als $WS_EX_MDIChild oder so ähnlich und setze die Haupt-GUI als Parent;)

  • Ich meinte, du sollst die Workarea als ws_ex_MDIChild erstellen.

    [autoit]

    Local $hwnd=GUICreate("",$w,$h,$x,$y,$WS_POPUP,$WS_EX_MDICHILD,$gui[0])

    [/autoit]


    (und wenn du willst, kannst du auch eine Farbe wählen, die bei der Workarea als transparent angezeigt wird: zusätzlich $WS_EX_LAYERED und _WinAPI_SetLayeredWindowAttributes)

  • Hm nein ich glaube ich versuche es mit $WS_CHILD

    EDIT:
    Leider klappt es nicht, aber wenn ich es mit anderen Fenstern mache geht es

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>

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

    $gui=GUICreate("",400,400)
    GUISetBkColor(0x000000)
    GUISetState()
    $g2=GUICreate("",200,200,100,100,$WS_CHILD,0,$gui)
    GUISetBkColor(0x00FF00)
    GUISetState()

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

    While GUIGetMsg()<>-3
    Sleep(10)
    WEnd

    [/autoit]

    Neue Createfunktion

    Spoiler anzeigen
    [autoit]


    Func _AeroWorkAreaCreate($backgra,$x,$y,$w,$h,$state=@SW_SHOW) ;für GUI Buttons
    Local $num=__AeroGet($backgra)
    If $num=-1 Then Return
    Local $struct=$structs[$num]
    Local $gui=__AeroStructGetGUI($struct)
    $y+=25
    Local $hwnd=GUICreate("",$w,$h,$x,$y,$WS_CHILD,0,$gui[0])
    GUISetState($state,$hwnd)
    Return $hwnd
    EndFunc

    [/autoit]

    EDIT:
    Jetzt weiß ich warum man MDICHILD brauch, danke habe es jetzt damit gemacht

    EDIT:
    Oben upgedatet

    2 Mal editiert, zuletzt von TheShadowAE (1. Juni 2010 um 22:33)

  • schöne idee aber die möglichkeit zu minimieren und zu maximieren solltest du noch einbauen

  • schöne sache nur hat es niht wirklich viel mit Aero zu tun und bei denem Bsp ist GUI nicht verschiebar ist das so gewollt?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Ich geb zu, das war mal mehr Aero, aber ich habe das verunschärfen nicht hingekreigt. Ist wohl eher eine OwnStyle-UDF geworden
    Das Verschieben klappt bei mir

    EDIT:
    Hab mal vom Titel Aero für WinXP zu etwas passenderem gewechselt

    EDIT:
    Weiß jemand ob (und wie) man Zwischenpunkte in die LineBrushs macht? (wie hier)

    2 Mal editiert, zuletzt von TheShadowAE (6. Juli 2010 um 23:22)

  • Hey ich hab mir die neue Version runtergeladen und wolte das bsp ausprobieren, jdeoch erhalte ich nur einen Schwarzen punkt, statt eines Fensters.

    dem Bild oben konnte ich entnehemen, dass sys menü eingebaut hast, ansich sehr schön , alerdings sieht es komisch aus, den schließen button direkt neben dem minimieren zu haben.
    Wäre es nicht auch eine Möglichkeit den maximieren button mit einzufügen und diesen auszugrauen?

    hier noch das bild wie das bsp bei mir dargestellt wird.

    EDIT: oder ist diese GUIT nicht das bsp. im zip habe ich nur dieses?!?

    mfg Darter

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (8. Juli 2010 um 16:26)

  • Also hast du kein aktuelles bsp. wie es oben im bild aussieht.? bei dem bsp oben steht ja nicht aktuell.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Oben sind 2 Beispiele, das 2. ist das oben:

    Spoiler anzeigen
    [autoit]


    #include <Aero.au3>
    _GDIPlus_Startup() ;Muss nicht, macht _AeroCreate
    $gui=_AeroCreate("Hallo",400,400,".\ICONS\Arbeitsplatz.ico")
    GUISetState()
    $wa=_AeroWorkAreaCreate($gui,0,0,99,18,@SW_HIDE)
    $b=GUICtrlCreateButton("Test",-1,-1,100,20)
    _AeroWorkAreaSetState($wa,@SW_SHOW)
    ;Style Test
    $size=_AeroGetSize($gui)
    $style=_AeroStyleCreate(_Array2(0,0),_Array2(0,0),_Array2(0,$size[0]),_Array2(25,$size[1]),_Array2(0x77AAAAAA,0xDD00FF00),_Array2(0xEE555555,0xDD0000FF),0)
    _AeroStyleDraw($gui,$style)
    $style2=_AeroStyleCreate(0,0,0,$size[1],0x77AAAAAA,0xEE555555,3)
    ;~ _AeroStyleDraw($gui,$style2)
    ;

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

    While 1
    $msg=GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $b
    MsgBox(0,"","")
    EndSwitch
    Sleep(10)
    WEnd

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

    _AeroStyleDelete($style)
    _AeroStyleDelete($style2)

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

    _AeroWorkAreaDelete($wa)
    _AeroDelete($gui)
    _GDIPlus_Shutdown() ;Muss, macht _AeroDelete NICHT

    [/autoit]

  • 8| War das vorher auch schon da oder werden meine Augen solangsam schlechter :pinch:

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.