Gracias Dr. Soto, me sirvio perfecto !.
A mi hija de 8 años le dejaron aprenderse los Estados de la Republica Mexicana,
y le hice este programita para que se los aprendiera además de su ubicación.
-------------------------------------------------------------------------------
Thank you Dr. Soto, served me perfect!.
My 8 year old daughter left him learn the States of the Mexican Republic,
and I made this little program to have them learn besides location.
-------------------------------------------------------------------------------
Code: Select all
*----------------------------------------------------------------------------------------------
#include "hmg.ch"
#include "hfcl.ch"
FUNCTION MAIN
LOCAL BTstruct
PRIVATE cFileName := "MapaEdos.Rep.Mex.jpg" // <== Pon tu imagen
PRIVATE hBitmap:=0, hBitmap2:=0, ImgWidth:=0 , ImgHeight:=0, hDC, lFill:=.F., nRow:=0, nCol:=0
aEstados:={ "Aguascalientes", "Baja California", "Baja California Sur", "Campeche", "Coahuila de Zaragoza", "Colima", ;
"Chiapas", "Chihuahua", "Distrito Federal", "Durango", "Guanajuato", "Guerrero", "Hidalgo", "Jalisco", "México", ;
"Michoacán", "Morelos", "Nayarit", "Nuevo León", "Oaxaca", "Puebla", "Querétaro", "Quintana Roo", "San Luis Potosí", ;
"Sinaloa", "Sonora", "Tabasco", "Tamaulipas", "Tlaxcala", "Veracruz", "Yucatán", "Zacatecas" }
DEFINE WINDOW Win1 AT 0,0 WIDTH 600 HEIGHT 650 MAIN TITLE "DEMO - Click on Window to Draw..." BACKCOLOR {200,216,237} ;
ON INIT Proc_ON_INIT () ;
ON RELEASE Proc_ON_RELEASE()
@ 5 , 310 LABEL LB_Titulo VALUE "Da click en el mapa de acuerdo el nombre. --->" WIDTH 500 HEIGHT 16 FONT 'Verdana' SIZE 10 ; // BOLD
FONTCOLOR BLACK TRANSPARENT RIGHTALIGN
@ 0 , 815 COMBOBOX CB_Estados WIDTH 160 HEIGHT 200 FONT "Arial" SIZE 9 ITEMS aEstados VALUE 1 TOOLTIP "Seleccione un Estado"
@ 25 , 0 IMAGE Image1 PICTURE "" ACTION Proc_ON_CLICK()
DEFINE CONTEXT MENU OF Win1
MENUITEM "Reload" ACTION { || hBitmap := BT_BitmapLoadFile( cFileName ), ; // NAME <MenuItemName>] IMAGE <cImageName> ] CHECKED
BT_HMGSetImage( "Win1", "Image1", hBitmap ), ;
BT_ClientAreaInvalidateAll( "Win1" ) }
SEPARATOR
MENUITEM "Save" ACTION { || SaveImg( ) }
END MENU
END WINDOW
CENTER WINDOW Win1
ACTIVATE WINDOW Win1
RETURN NIL
FUNCTION UpdYX( )
Win1.Title:= "DEMO - Click on Window to Draw... "+PADC( nRow,5)+" / "+PADC( nCol,5)
RETURN
PROCEDURE Proc_ON_INIT
hBitmap := BT_BitmapLoadFile( cFileName )
Win1.Width := ImgWidth := BT_BitmapWidth( hBitmap )
Win1.Height := ImgHeight := BT_BitmapHeight( hBitmap )+60
Win1.Center
BT_HMGSetImage("Win1", "Image1", hBitmap)
RETURN
PROCEDURE Proc_ON_CLICK
LOCAL BTstruct // hDC,
LOCAL hBitmap
*------------------------------------------------
*#define OFFSET 40
GetCursorPos (@nCol, @nRow) // Para saber las coordenadas dentro del control IMAGE
ScreenToClient (Win1.Image1.HANDLE, @nCol, @nRow)
*------------------------------------------------
UpdYX()
hBitmap := BT_HMGGetImage( "Win1", "Image1" )
hDC := BT_CreateDC( hBitmap, BT_HDC_BITMAP, @BTstruct )
BT_DrawText( hDC, nRow, nCol, Win1.CB_Estados.DisplayValue, "Lucida", 8, WHITE, BLUE, BT_TEXT_OPAQUE, BT_TEXT_LEFT, BT_TEXT_NORMAL_ORIENTATION )
BT_DeleteDC(BTstruct)
BT_ClientAreaInvalidateAll("Win1") // Repinta toda el area
Win1.CB_Estados.Value:=Random( LEN( aEstados ) ) // Seleccion aleatoria de un estado
RETURN
PROCEDURE SaveImg
LOCAL hBitmap
hBitmap := BT_HMGGetImage( "Win1", "Image1" )
BT_BitmapSaveFile( hBitmap, "Image_33.png", BT_FILEFORMAT_PNG )
MsgInfo( "Saved Image..." )
RETURN
PROCEDURE Proc_ON_RELEASE
BT_BitmapRelease( hBitmap )
RETURN
*----------------------------------------------------------------------
Estoy viendo un sin fin de posibilidades para el desarrollo de aplicaciones. Gracias de nuevo !
I'm seeing a lot of possibilities for application development. Thank you again!
Lo siento por la mezcla Español-Ingles.
Sorry for the Spanish-English mixture.