Farbverlauf ganz simpel per WindowApi GradientFill
Verfasst: 22.02.2008 16:45
Meine bisherigen Farbverlauf Routinen waren ja ganz nett, aber irgendwie naja...
Abhilfe schafft Billys Api Gewurschtel.
der Api Befehl GradientFill einmal ganz simpel. Wenn man allerdings die Beschreibung auf MSDN liest und das mit meinem saumäßigen Englisch, da wird einem ja ... naja
Abhilfe schafft Billys Api Gewurschtel.
der Api Befehl GradientFill einmal ganz simpel. Wenn man allerdings die Beschreibung auf MSDN liest und das mit meinem saumäßigen Englisch, da wird einem ja ... naja
Code: Alles auswählen
;von HJBREMER 22.02.2008
;PB 4.1 Windows XP
;Farbverlauf ganz simpel via API
Declare Api_Farbverlauf(dc,br,hh,farbe0,farbe1,flag=1)
Declare myImage(pbnr,br,hh,farbe0,farbe1,flag=1)
;falls ältere PB Version als 4.1 ev. GradientFill_ nicht definiert
;Import "msimg32.lib"
; Achtung: kein Unterstrich
; GradientFill(*DC, *tVertex, VertexAnz.l, *gRect, RectAnz.l, flag.l)
;EndImport
Enumeration
#win0
#img1
#img2
#img3
#butimg1
#butimg2
#butimg3
EndEnumeration
windowstyles = #PB_Window_SystemMenu|1 ;die 1 = zentriert
hwnd=OpenWindow(#win0, 0, 0, 480,400, "",windowstyles)
CreateGadgetList(hwnd)
br=100
hh=80
ID=myImage(#img1,br,hh,$FFF2FF,$32B7FF)
ImageGadget(#butimg1,5,5,br,hh,ID)
ID=myImage(#img2,br,hh,#Gray,#Blue,0)
ImageGadget(#butimg2,5,105,br,hh,ID)
ID=myImage(#img3,br,hh,#Magenta,#Red)
ImageGadget(#butimg3,110,5,br,hh,ID)
Repeat
event=WaitWindowEvent()
If Event = #PB_Event_Gadget Or EventID = #PB_Event_Menu
welcherButton=EventGadget()
Select welcherButton
Case #butimg1: Debug "1"
Case #butimg2: Debug "2"
Case #butimg3: Debug "3"
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End
Procedure myImage(pbnr,br,hh,fv,fb,flag=1)
imgID = CreateImage(pbnr,br,hh)
dc = StartDrawing(ImageOutput(pbnr))
Api_Farbverlauf(dc,br,hh,fV,fB,flag)
SetRect_(r.RECT,0,0,br,hh) ;left,top,right,bottom
DrawEdge_(dc,r,#EDGE_BUMP,#BF_RECT)
StopDrawing()
ProcedureReturn imgID
EndProcedure
Procedure Api_Farbverlauf(dc,br,hh,farbe0,farbe1,flag=1)
;http://msdn2.microsoft.com/en-us/library/ms532338(VS.85).aspx
;flag=0 = #GRADIENT_FILL_RECT_H
;flag=1 = #GRADIENT_FILL_RECT_V
;da RGB Farben 24 Bit Werte sind und
;laut MSDN 16 Bit Werte gebraucht werden
;muß jeder Wert um 8 Bit verschoben werden, darum << 8
Dim t_vertex.TRIVERTEX(1)
;t_vertex(0)\x + y ist eh immer null
t_vertex(0)\Red = Red(farbe0) <<8
t_vertex(0)\Green = Green(farbe0)<<8
t_vertex(0)\Blue = Blue(farbe0) <<8
t_vertex(1)\x = br
t_vertex(1)\y = hh
t_vertex(1)\Red = Red(farbe1) <<8
t_vertex(1)\Green = Green(farbe1)<<8
t_vertex(1)\Blue = Blue(farbe1) <<8
g_rect.GRADIENT_RECT
g_rect\UpperLeft = 0
g_rect\LowerRight = 1
Gradientfill_(dc, @t_vertex(), 2, @g_rect, 1, flag)
EndProcedure