Page 1 of 1
Draw box on screen
Posted: Thu Apr 05, 2007 6:25 pm
by Jeff Barnes
Hi Everybody,
This might be a bit tricky to explain but I'll give it a try:
I need to allow the user to draw a box on the screen via a click/drag and fill that area with some fill color.
I also need to limit the area on the window where the user can do this.
(I only want the user to be able to do this in 2 locations)
I also need to know the top, left, bottom, right co-ordinates of where the user put the box.
I have no idea where to even start with this one ... I hope someone can help with this.
Thanks in advance,
Jeff
Posted: Sat Apr 07, 2007 2:05 am
by Jeff Barnes
Ok ... lets start over ...
How can I allow the user to draw a box on the screen with a click and drag?
If I can figure out this first step I know how I can fill the box with a color.
Then all I will need is the know the co-ordinates of the box and I think I can get the rest.
Thanks,
Jeff
Posted: Sat Apr 07, 2007 4:43 pm
by Antonio Linares
Jeff,
There is a working sample at fwh\visual\source\design.prg
Please review the methods LButtonDown(), LButtonUp(), MouseMove() and DrawBox()
Posted: Sat Apr 07, 2007 6:17 pm
by Jeff Barnes
Thanks Antonio, but I don't have a "visual" folder in my FWH directory.
Could you please e-mail me the design.prg file
jeff @ can-soft . net
Thanks,
Jeff
Posted: Sat Apr 07, 2007 6:26 pm
by Antonio Linares
Jeff,
Already sent by email
Posted: Sat Apr 07, 2007 8:29 pm
by Jeff Barnes
Antonio,
Sorry to be a pain but it looks like I also need the Visual.ch file.
Could you please send that to my email as well.
Thanks,
Jeff
Posted: Sat Apr 07, 2007 9:38 pm
by Antonio Linares
Jeff,
Already sent
![Smile :-)](./images/smilies/icon_smile.gif)
Posted: Sun Apr 08, 2007 12:14 am
by Jeff Barnes
I'm having trouble figuring this out.
Do you have a sample that shows how to call the function that allow you to draw the box?
Jeff
Posted: Sun Apr 08, 2007 11:44 am
by Antonio Linares
Jeff,
Here you have a working sample:
Code: Select all
#include "FiveWin.ch"
static oWnd, lBoxDraw := .f., nBoxTop, nBoxLeft, nBoxBottom, nBoxRight
function Main()
DEFINE WINDOW oWnd TITLE "Test"
oWnd:bLClicked = { | nRow, nCol | MouseDown( nRow, nCol ) }
oWnd:bLButtonUp = { | nRow, nCol | MouseUp( nRow, nCol ) }
oWnd:bMMoved = { | nRow, nCol | MouseMove( nRow, nCol ) }
ACTIVATE WINDOW oWnd
return nil
function MouseDown( nRow, nCol )
lBoxDraw = .t.
nBoxTop = nRow
nBoxLeft = nCol
nBoxBottom = nRow
nBoxRight = nCol
SetCapture( oWnd:hWnd )
DrawBox()
return nil
function MouseUp( nRow, nCol )
if lBoxDraw
DrawBox()
lBoxDraw = .f.
ReleaseCapture()
endif
return nil
function MouseMove( nRow, nCol )
if lBoxDraw
DrawBox()
nBoxBottom = nRow
nBoxRight = nCol
DrawBox()
endif
return nil
function DrawBox()
RectDotted( oWnd:hWnd, nBoxTop,;
nBoxLeft, nBoxBottom, nBoxRight )
return nil
![Image](http://img224.imageshack.us/img224/5599/boxre7.png)
Posted: Sun Apr 08, 2007 2:23 pm
by Jeff Barnes
Thank you very much Antonio.
This is exactly what I needed.
With your help I was able to draw the 2 boxes with user limits and the fill colors just like I had visioned in less than 10 minutes.
Thanks again,
Jeff
Posted: Sun Apr 08, 2007 2:29 pm
by Antonio Linares
Jeff,
Would you mind to share your sample to see how it works ? Thanks
![Smile :-)](./images/smilies/icon_smile.gif)
Posted: Sun Apr 08, 2007 4:00 pm
by Jeff Barnes
Antonio,
Here is the sample you gave me with my small changes.
Basically, in my application, I have 2 waveforms on the screen where I need to give the user the option to "exclude" some data if need be.
The 2 "filled" areas in the code below would represent where my waveforms are.
You can look at an actual screen shot (with the waveforms) here:
http://img337.imageshack.us/my.php?image=boxvb4.jpg
Again, Thank you very much for all your help Antonio. I would never have figured out this one with out the help.
Jeff
Code: Select all
#include "FiveWin.ch"
static oWnd, lBoxDraw := .f., nBoxTop, nBoxLeft, nBoxBottom, nBoxRight, oBrush
function Main()
DEFINE BRUSH oBrush STYLE DIAGCROSS COLOR RGB(218,165,32)
DEFINE WINDOW oWnd TITLE "Box Test with Fill"
oWnd:bLClicked = { | nRow, nCol | MouseDown( nRow, nCol ) }
oWnd:bLButtonUp = { | nRow, nCol | MouseUp( nRow, nCol ) }
oWnd:bMMoved = { | nRow, nCol | MouseMove( nRow, nCol ) }
ACTIVATE WINDOW oWnd MAXIMIZED
return nil
function MouseDown( nRow, nCol )
lBoxDraw = .t.
nBoxTop = nRow
nBoxLeft = nCol
nBoxBottom = nRow
nBoxRight = nCol
SetCapture( oWnd:hWnd )
DrawBox()
return nil
function MouseUp( nRow, nCol )
Local aRect1, aRect2, hPen
oWnd:GetDc()
hPen := CreatePen( 0, 1, RGB(54,54,54))
if lBoxDraw
DrawBox()
lBoxDraw = .f.
ReleaseCapture()
aRect1 := { 26,nBoxLeft,125,nBoxRight}
aRect2 := {185,nBoxLeft,395,nBoxRight}
FillRect(oWnd:hDc,aRect1,oBrush:hBrush)
FillRect(oWnd:hDc,aRect2,oBrush:hBrush)
endif
return nil
function MouseMove( nRow, nCol )
if lBoxDraw
DrawBox()
nBoxBottom = nRow
nBoxRight = nCol
DrawBox()
endif
return nil
function DrawBox()
RectDotted(oWnd:hWnd, 26,nBoxLeft,125,nBoxRight)
RectDotted(oWnd:hWnd,185,nBoxLeft,395,nBoxRight)
return nil
Posted: Sun Apr 08, 2007 4:40 pm
by Enrico Maria Giordano
Wonderful samples!
EMG
Posted: Sun Apr 08, 2007 5:17 pm
by Antonio Linares
Jeff,
Please change your function MouseUp() this way:
Code: Select all
function MouseUp( nRow, nCol )
Local aRect1, aRect2
if lBoxDraw
oWnd:GetDC()
DrawBox()
lBoxDraw = .f.
ReleaseCapture()
aRect1 := { 26,nBoxLeft,125,nBoxRight}
aRect2 := {185,nBoxLeft,395,nBoxRight}
FillRect(oWnd:hDc,aRect1,oBrush:hBrush)
FillRect(oWnd:hDc,aRect2,oBrush:hBrush)
oWnd:ReleaseDC()
endif
return nil