Draw box on screen
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
Draw box on screen
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
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
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Jeff,
Here you have a working sample:
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
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Jeff Barnes
- Posts: 912
- Joined: Sun Oct 09, 2005 1:05 pm
- Location: Ontario, Canada
- Contact:
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
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
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Jeff,
Please change your function MouseUp() this way:
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