FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Draw box on screen
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Thu Apr 05, 2007 06:25 PM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sat Apr 07, 2007 02:05 AM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sat Apr 07, 2007 04:43 PM

Jeff,

There is a working sample at fwh\visual\source\design.prg

Please review the methods LButtonDown(), LButtonUp(), MouseMove() and DrawBox()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sat Apr 07, 2007 06:17 PM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sat Apr 07, 2007 06:26 PM

Jeff,

Already sent by email

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sat Apr 07, 2007 08:29 PM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sat Apr 07, 2007 09:38 PM

Jeff,

Already sent :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sun Apr 08, 2007 12:14 AM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sun Apr 08, 2007 11:44 AM
Jeff,

Here you have a working sample:
#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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sun Apr 08, 2007 02:23 PM

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

Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sun Apr 08, 2007 02:29 PM

Jeff,

Would you mind to share your sample to see how it works ? Thanks :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 933
Joined: Sun Oct 09, 2005 01:05 PM
Draw box on screen
Posted: Sun Apr 08, 2007 04:00 PM
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


#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
Thanks,

Jeff Barnes



(FWH 16.11, xHarbour 1.2.3, Bcc730)
Posts: 9022
Joined: Thu Oct 06, 2005 08:17 PM
Draw box on screen
Posted: Sun Apr 08, 2007 04:40 PM

Wonderful samples!

EMG

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Draw box on screen
Posted: Sun Apr 08, 2007 05:17 PM
Jeff,

Please change your function MouseUp() this way:
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
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion