IonicWind Software

Creative Basic => GUI Programs => Topic started by: GWS on September 10, 2013, 08:00:13 AM

Title: Gradient coloured Boxes
Post by: GWS on September 10, 2013, 08:00:13 AM
Hi,

Here's a subroutine that draws boxes and colours them with any colour gradients you specify.

Just position and size them, and specify the colours you want at the top left, top right, bottom left and bottom right of the box. :)

Not amazingly fast - but then there's a lot of pixels to colour in  ::)

Best wishes, :)

Graham
Title: Re: Gradient coloured Boxes
Post by: GWS on September 10, 2013, 06:36:12 PM
Just thought I'd mention .. standard top to bottom, left to right, and diagonal shading is obtained by choosing the corner colours to give the desired effect ..  :)

One snag .. if another window opens on top (like wordpad), the boxes are erased  :o .. and I've forgotten how to stop that happening. Good grief! - can anyone remember how to fix that?

Best wishes, :)

Graham
Title: Re: Gradient coloured Boxes
Post by: LarryMc on September 10, 2013, 11:30:48 PM
make your window @noautodraw
then put your drawing code inside the @IDPAINT/WM_PAINT message handler
like this example
def w:window
declare "user32", InvalidateRect(hwnd:window, lpRect:int, bErase:int),int
window w, 0, 0, 500, 500, @CAPTION|@SYSMENU|@NOAUTODRAW|@SIZE, 0, "Grid sample", Handler
control w, "C, Toggle grid, 5, 450, 100, 20, 0, 1"
run = 1
waituntil run = 0
closewindow w
end
sub Handler
   select @CLASS
   case @IDCONTROL
      InvalidateRect(w, 0, 1)
   case @IDPAINT :' WM_PAINT
      def hdc:int
      hdc = gethdc(w)
      DrawPicture()
      if (getstate(w, 1) = 1) then DrawGrid()
      releasehdc(w, hdc)
   case @IDCLOSEWINDOW
      run = 0
   endselect
return
sub DrawGrid()
   for i = 0 to 500 step 10
      line(w, i, 0, i, 440, 0)
   next i
   for i = 0 to 440 step 10
      line(w, 0, i, 500, i, 0)
   next i
return
sub DrawPicture()
   rect(w, 40, 40, 200, 200, rgb(255, 0, 0), rgb(255, 0, 0))
   circle(w, 240, 240, 50, rgb(0, 255, 0), rgb(0, 255, 0))
return
Title: Re: Gradient coloured Boxes
Post by: GWS on September 11, 2013, 02:09:41 AM
Thanks Larry - I'll try that ..  :)

I got as far as @noautodraw .. but of course that did nothing by itself - it was the other bits I'd forgotten  ::)

Getting a bit old for this tricky stuff ..  :)

Graham
Title: Re: Gradient coloured Boxes
Post by: GWS on September 11, 2013, 07:53:47 AM
No luck .. the noautodraw test program crashes ..  ::)

I suspect it's because of multiple @IDPAINT re-paints occuring, calling the Box subroutine to fire too many times - and the stack running out of space.

I'm not hopeful with this one .. there's such a lot of drawing going on.

It would be nice if the completely drawn screen could be cached - and the whole thing blitted as required.
No idea how to do this though.

Best wishes, :)

Graham