Re: Request for testing - Gradient Rectangle

new topic     » goto parent     » topic index » view thread      » older message » newer message

Martin,

It appears to "work" on 98 1st ed., but looks like it could be a better
gradient somehow; what I see is a *band* of solid green on the left, a
*band* of solid blue on the right, and a kind of "speckled" pseudo-gradient
in the middle.

I can't think of a good suggestion of how to make it better, though.

Dan Moyer


----- Original Message -----
From: "Martin Stachon" <martin.stachon at worldonline.cz>
To: "EUforum" <EUforum at topica.com>
Sent: Saturday, February 01, 2003 9:53 AM
Subject: Request for testing - Gradient Rectangle


>
> Hello,
> below is my function gradientRect(). It is used to draw nice
> gradient rectangles using GDI - fast. I'd appreciate an info about
> Windows versions, which can run this - especially Win9x. Thanks.
>
>       Martin <martin.stachon at tiscali.cz>
>
> <Code>
>
> include win32lib.ew
> without warning
>
> constant
> msimg32 = registerw32Library("msimg32.dll"),
> xGradientFill = registerw32Procedure( msimg32, "GradientFill",
> {C_LONG,C_POINTER,C_LONG,C_LONG,C_LONG,C_LONG} )
>
> constant
>  TRIVERTEX_x     = allot(Long),
>  TRIVERTEX_y     = allot(Long),
>  TRIVERTEX_Red   = allot(Word),
>  TRIVERTEX_Green = allot(Word),
>  TRIVERTEX_Blue  = allot(Word),
>  TRIVERTEX_Alpha = allot(Word),
>  SIZEOF_TRIVERTEX = allotted_size(),
>
>  GRADIENT_RECT_UpperLeft  = allot(Long),
>  GRADIENT_RECT_LowerRight = allot(Long),
>  SIZEOF_GRADIENT_RECT     = allotted_size()
>
> constant
>  GRADIENT_FILL_RECT_H   = #00000000,
>  GRADIENT_FILL_RECT_V   = #00000001,
>  GRADIENT_FILL_TRIANGLE = #00000002,
>  GRADIENT_FILL_OP_FLAG  = #000000FF
>
> global procedure gradientRect(atom id, atom leftColor, atom rightColor,
atom x1, atom y1,
> atom x2, atom y2)
>  atom hDC, PTRIVERTEX, gRect
>  PTRIVERTEX = acquire_mem( 0, 2*SIZEOF_TRIVERTEX )
>  store(PTRIVERTEX, TRIVERTEX_x, x1)
>  store(PTRIVERTEX, TRIVERTEX_y, y1)
>  store(PTRIVERTEX, TRIVERTEX_Red,   and_bits(leftColor, #0000FF)*#100)
>  store(PTRIVERTEX, TRIVERTEX_Green, and_bits(leftColor, #00FF00))
>  store(PTRIVERTEX, TRIVERTEX_Blue,  and_bits(leftColor, #FF0000)/#100)
>  store(PTRIVERTEX, TRIVERTEX_Alpha, 0)
>
>  store(PTRIVERTEX, TRIVERTEX_x     &SIZEOF_TRIVERTEX, x2)
>  store(PTRIVERTEX, TRIVERTEX_y     &SIZEOF_TRIVERTEX, y2)
>  store(PTRIVERTEX, TRIVERTEX_Red   &SIZEOF_TRIVERTEX, and_bits(rightColor,
#0000FF)*#100)
>  store(PTRIVERTEX, TRIVERTEX_Green &SIZEOF_TRIVERTEX, and_bits(rightColor,
#00FF00))
>  store(PTRIVERTEX, TRIVERTEX_Blue  &SIZEOF_TRIVERTEX, and_bits(rightColor,
#FF0000)/#100)
>  store(PTRIVERTEX, TRIVERTEX_Alpha &SIZEOF_TRIVERTEX, 0)
>
>  gRect = acquire_mem( 0, SIZEOF_GRADIENT_RECT )
>  store(gRect, GRADIENT_RECT_UpperLeft,  0)
>  store(gRect, GRADIENT_RECT_LowerRight, 1)
>
>  hDC = getDC(id)
>  w32Proc(xGradientFill, {hDC, PTRIVERTEX, 2, gRect, 1,
GRADIENT_FILL_RECT_H})
>  releaseDC(id)
>  release_mem(PTRIVERTEX)
>  release_mem(gRect)
> end procedure
>
> constant win = create(Window, "Win", 0, Default, Default, 500, 500, 0)
>
> procedure onPaint_win(integer self, integer event, sequence params)
>  gradientRect(win, Green, Blue, 0, 0, 100, 100) -- zelena - modra, pro
blazna dobra
> end procedure
> setHandler(win, w32HPaint, routine_id("onPaint_win"))
>
> WinMain(win, Normal)
>
> </code>
>
>
>
> TOPICA - Start your own email discussion group. FREE!
>

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu