Farbverlauf ganz simpel per WindowApi GradientFill

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Farbverlauf ganz simpel per WindowApi GradientFill

Beitrag von hjbremer »

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

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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Hast du auch ne Frage oder soll das für CTT sein?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten