Due problemini
Moderator: Enrico Maria Giordano
Due problemini
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 ?
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
Falconi Silvio
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Due problemini
Al codeblock bLClicked vengono passate automaticamente tali coordinate: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 ?
oImg:bLClicked = { | nRow, nCol | MyFunc( nRow, nCol ) }
Usa il codeblock di cui sopra unito ai vari esempi di cerchi che ti ho preparato in passato.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 ?
EMG
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
mi da errore non trova hdc
[/code]
Code: Select all
Error occurred at: 08/01/03, 14:08:12
Error description: Error BASE/1003 Variable does not exist: HDC
Code: Select all
#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
Falconi Silvio
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Così funziona:
EMG
Code: Select all
#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
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
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
Falconi Silvio
la funzione circle è stata moificata cosi :
Code: Select all
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
Falconi Silvio