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
#include-once
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsex.au3>
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()
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
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
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
Und nun ein Beispiel, gefolgt von der UDF (dieses Beispiel ist alt, benutzt also noch den alten Style):
Beispiel
#include <Aero.au3>
_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)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $b
MsgBox(0,"","")
EndSwitch
Sleep(10)
WEnd
_AeroWorkAreaDelete($wa)
_AeroDelete($gui)
_GDIPlus_Shutdown() ;Muss, macht _AeroDelete NICHT
~~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
;~ #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)
While 1
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $b
MsgBox(0,"","")
EndSwitch
Sleep(10)
WEnd
_AeroStyleDelete($style)
_AeroStyleDelete($style2)
_AeroWorkAreaDelete($wa)
_AeroDelete($gui)
_GDIPlus_Shutdown() ;Muss, macht _AeroDelete NICHT
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)