Due problemini

Moderator: Enrico Maria Giordano

Due problemini

Postby Silvio » Fri Apr 14, 2006 10:38 pm

1) Qualcuno di voi sa dirmi se è possibile premere su un'immagine con il mouse e la procedura mi restituisce le coordinate esatte dove ha "puntato" il mouse ?

2)E' possibile creare un piccolo cerchio rosso nel punto dove ha cliccato il mouse sempre sull'immagine per determinare appunto l'area interessata ?
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: Due problemini

Postby Enrico Maria Giordano » Sat Apr 15, 2006 9:26 am

Silvio wrote:1) Qualcuno di voi sa dirmi se è possibile premere su un'immagine con il mouse e la procedura mi restituisce le coordinate esatte dove ha "puntato" il mouse ?


Al codeblock bLClicked vengono passate automaticamente tali coordinate:

oImg:bLClicked = { | nRow, nCol | MyFunc( nRow, nCol ) }

Silvio wrote:2)E' possibile creare un piccolo cerchio rosso nel punto dove ha cliccato il mouse sempre sull'immagine per determinare appunto l'area interessata ?


Usa il codeblock di cui sopra unito ai vari esempi di cerchi che ti ho preparato in passato.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8715
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Silvio » Sat Apr 15, 2006 12:54 pm

Grazie Emg
cmq tu credi che si possa fare su un immagine jpg?
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Enrico Maria Giordano » Sat Apr 15, 2006 1:12 pm

Certo, basta utilizzare la classe TImage.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8715
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Silvio » Sat Apr 15, 2006 1:17 pm

mi da errore non trova hdc

Code: Select all  Expand view
Error occurred at: 08/01/03, 14:08:12
   Error description: Error BASE/1003  Variable does not exist: HDC



Code: Select all  Expand view
#include "Fivewin.ch"
#include "Image.ch"

FUNCTION MAIN()

    LOCAL oDlg
    Local oImg

    LOCAL nX := 100
    LOCAL nY := 100

    LOCAL nMinRad := 20
    LOCAL nMaxRad := 100

    LOCAL nStep := 10

    DEFINE DIALOG oDlg;
           SIZE 600, 400
           @ 0, 0 IMAGE oImg SIZE 150, 150 OF oDlg  ADJUST
             oImg:Progress( .f. )
           oImg:bLClicked = { | nRow, nCol | CIRCLES( oDlg, hDC, nRow, nCol, nMinRad, nMaxRad, nStep ) }
          @ 1, 28 BUTTON "Select Image" SIZE 50,10 OF oDlg ACTION GetImage( oImg )
    ACTIVATE DIALOG oDlg CENTER
             // ON PAINT CIRCLES( oDlg, hDC, nX, nY, nMinRad, nMaxRad, nStep );
    RETURN NIL

#define BRUSH_NULL 5

STATIC FUNCTION CIRCLES( oDlg, hDC, nX, nY, nMinRad, nMaxRad, nStep )

    LOCAL hOldBrush := SELECTOBJECT( hDC, GETSTOCKOBJECT( BRUSH_NULL ) )

    LOCAL i

    FOR i = nMinRad TO nMaxRad STEP nStep
        oDlg:Circle( nX - i, nY - i, i * 2 )
    NEXT

    SELECTOBJECT( hDC, hOldBrush )

    RETURN NIL

//----------------------------------------------------------------------------//

function GetImage( oImg )

   local gcFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" +         ;
                             "DIB   (*.dib)| *.dib|" +          ;
                             "PCX   (*.pcx)| *.pcx|"  +         ;
                             "JPEG  (*.jpg)| *.jpg|" +          ;
                             "GIF   (*.gif)| *.gif|"  +         ;
                             "TARGA (*.tga)| *.tga|" +          ;
                             "RLE   (*.rle)| *.rle|" +          ;
                             "All Files (*.*)| *.*"             ;
                            ,"Please select a image file", 4 )

   if ! Empty( gcFile ) .and. File( gcFile )
      oImg:LoadBmp( gcFile )
   endif

return nil




[/code]
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Enrico Maria Giordano » Sat Apr 15, 2006 1:26 pm

Devi utilizzare i metodi

hDC = oDlg:GetDC()

e alla fine

oDlg:ReleaseDC()

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8715
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Silvio » Sat Apr 15, 2006 1:33 pm

ma dentro alla funzione circle ?
o in main

ma perchè non se lo prende da solo ?
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Enrico Maria Giordano » Sat Apr 15, 2006 2:00 pm

Dentro la funzione Circle(). Non se la prende da solo perché non sei nella ON PAINT. Guardati le classi. Ci sono quanti esempi vuoi di questa tecnica.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8715
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Silvio » Sat Apr 15, 2006 2:05 pm

SCUSAMI MA
l'avevo già messa dentro circle ma mi dava errore lo stesso
cmq dopo il caffè riprovo....

cmq BUONA PASQUA A TE E ALLA TUA FAMIGLIA
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Enrico Maria Giordano » Sat Apr 15, 2006 2:12 pm

Così funziona:

Code: Select all  Expand view
#include "Fivewin.ch"
#include "Image.ch"

FUNCTION MAIN()

    LOCAL oDlg
    Local oImg

    LOCAL nX := 100
    LOCAL nY := 100

    LOCAL nMinRad := 20
    LOCAL nMaxRad := 100

    LOCAL nStep := 10

    DEFINE DIALOG oDlg;
           SIZE 600, 400
           @ 0, 0 IMAGE oImg SIZE 150, 150 OF oDlg  ADJUST
             oImg:Progress( .f. )
           oImg:bLClicked = { | nRow, nCol | CIRCLES( oDlg, nRow, nCol, nMinRad, nMaxRad, nStep ) }
          @ 1, 28 BUTTON "Select Image" SIZE 50,10 OF oDlg ACTION GetImage( oImg )
    ACTIVATE DIALOG oDlg CENTER
             // ON PAINT CIRCLES( oDlg, hDC, nX, nY, nMinRad, nMaxRad, nStep );
    RETURN NIL

#define BRUSH_NULL 5

STATIC FUNCTION CIRCLES( oDlg, nX, nY, nMinRad, nMaxRad, nStep )

    LOCAL hDC := oDlg:GetDC()

    LOCAL hOldBrush := SELECTOBJECT( hDC, GETSTOCKOBJECT( BRUSH_NULL ) )

    LOCAL i

    FOR i = nMinRad TO nMaxRad STEP nStep
        oDlg:Circle( nX - i, nY - i, i * 2 )
    NEXT

    SELECTOBJECT( hDC, hOldBrush )

    oDlg:ReleaseDC()

    RETURN NIL

//----------------------------------------------------------------------------//

function GetImage( oImg )

   local gcFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" +         ;
                             "DIB   (*.dib)| *.dib|" +          ;
                             "PCX   (*.pcx)| *.pcx|"  +         ;
                             "JPEG  (*.jpg)| *.jpg|" +          ;
                             "GIF   (*.gif)| *.gif|"  +         ;
                             "TARGA (*.tga)| *.tga|" +          ;
                             "RLE   (*.rle)| *.rle|" +          ;
                             "All Files (*.*)| *.*"             ;
                            ,"Please select a image file", 4 )

   if ! Empty( gcFile ) .and. File( gcFile )
      oImg:LoadBmp( gcFile )
   endif

return nil


EMG
User avatar
Enrico Maria Giordano
 
Posts: 8715
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Postby Silvio » Sat Apr 15, 2006 3:26 pm

si c'ero gia arrivato
Ma...
hai visto cosa fa ?

se io premo in 145,145 lui crea il cerchio a 137 circa

io ho inserito per vedere se crea il cerchio nelle cordinate giuste :
prima :

oImg:bLClicked = { | nRow, nCol |( NMSGBOX(NrOW,NcOL),CIRCLES( oDlg, nRow, nCol, nMinRad, nMaxRad, nStep )) }

e poi nella funzione circle

// PER FARE UN CERCHIETTO
oDlg:Circle( nX , nY , 50 )
? NX
?NY

ho levato i cerchi concentrici in questo programma mi serve un solo cerchio( rosso/verde) max 50/60 di diametro

Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Postby Silvio » Sat Apr 15, 2006 3:28 pm

la funzione circle è stata moificata cosi :

Code: Select all  Expand view
STATIC FUNCTION CIRCLES( oDlg, nX, nY, nMinRad, nMaxRad, nStep )
    LOCAL   hDC := oDlg:GetDC()
    LOCAL hOldBrush := SELECTOBJECT( hDC, GETSTOCKOBJECT( BRUSH_NULL ) )




         // PER FARE UN CERCHIETTO
       oDlg:Circle( nX , nY , 50 )
       ? NX
       ?NY
    SELECTOBJECT( hDC, hOldBrush )
             oDlg:ReleaseDC()
    RETURN NIL
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy


Return to All products support

Who is online

Users browsing this forum: No registered users and 14 guests