VFP Shapes and maps drawings
Native vfp shapes are controls having some properties.Can be rectangular, roundrectangular or circular (set with their property curvature 0-99).
natively they cannot embed any drawing until vfp9 adds the property Polypoint who support to make drawings as polygons.
Specifies an array of coordinates for creating polygon shapes using the Shape control and polygon lines using the Line control. Read/write at design time and run time.There is native vfp drawing (pset,box,circle...) but its only a drawing .Shape is an object an can be manipulated programmatly.
the line control can in vfp9 draw a Bezier curve (using the LineSlant property and array).
from Foxhelp:
PolyPoints creates a polygon shape. For Line controls, PolyPoints creates a polygon line (polylines) or shape.
syntax:
Control.PolyPoints [= cArrayName]
where cArrayName Specifies the name of an array containing pairs of coordinates for drawing a polygon shape or line. Coordinates use the format (X, Y).can be also in %.
The array must be in scope in order for the object to properly display the polygon or polyline.
The array can have any dimension; however, having two columns makes it easier for you to program mainly when converting a simple cursor as i made in code.
Store the X-coordinate point in first column and store the Y-coordinate point in the second column.
The array must be filled entirely with numeric values; otherwise, trailing elements containing False (.F.) will prevent the line or shape from being drawn.
PolyPoints requires at least two pairs of coordinates to draw a line, three pairs of coordinates to draw a polygon line, three pairs of coordinates to draw a polygon shape with the Shape control, and four pairs of coordinates to draw an enclosed polygon line, or shape, with the Line control.
To create a polygon shape with the Line control, the fifth pair of coordinates in the array must have the same coordinates as the first pair to draw the last line segment and complete the polygon shape.
When setting the LineSlant property to draw Bezier curves, you must specify a total of (3n + 1) coordinates
with n representing the number of curves you want to draw. For more information, see LineSlant Property.
the codes below :
-creates a collection of points choosen manually and gathered into a cursor.(code *1*)
-the cursor is converted as array (2 columns) and populates a shape polypoint.
-that what i used to draw a map , accepting any quantity of points coordinates (x,y). code *3*
-in code 2 i used an image and populate it with native rectangular semi transparent shapes.this is done by the shape drawmode property.this builds a clickable map with some events as demo only.
-the gdiuplusX can also draw beautiful maps as in code *4*
-The code *5* is an example of what the web (powered with angular.js) can bring.
Click on code to select [then copy] -click outside to deselect
*1* gather manually data from a map into a cursor or a table
*populate the cursor at each click on region/center click on num region
*use the same form mandatory because same form coordinates (x,y) on each click
*this draw a small fill red rectangle to specify each region is gathered in cursor
*preferably click on regions 1,2,3...n to have same order in shapes created.
*this code assumes have downloaded the map (its added in code)
*the cursor (table) built is used in next code for the same map.
Set Defa To Addbs(Justpath(Sys(16,1)))
Publi yform0
yform0=Newobject("asup")
yform0.Show
Read Events
Retu
*
Define Class asup As Form
Top = 0
Left = 0
Height = 480
Width = 764
Caption = "Gathering map data in table.Click on the num region (center) to gather coordonnees in cursor"
Name = "Form1"
Add Object image1 As Image With ;
Picture = "frdep.gif", ;
Height = 400, ;
Left = 12, ;
MousePointer = 1, ;
Top = 12, ;
Width = 404, ;
Name = "Image1"
Add Object image2 As Image With ;
Stretch = 2, ;
Height = 217, ;
Left = 456, ;
Top = 24, ;
Width = 288, ;
Name = "Image2"
Add Object edit1 As EditBox With ;
Height = 229, ;
Left = 456, ;
Top = 248, ;
Width = 289, ;
Name = "Edit1"
Add Object label1 As Label With ;
AutoSize = .T., ;
FontBold = .T., ;
FontSize = 10, ;
Caption = "", ;
Height = 18, ;
Left = 518, ;
Top = 4, ;
Width = 2, ;
ForeColor = Rgb(255,0,0), ;
BackColor = Rgb(255,255,128), ;
Name = "Label1"
Procedure init
set curs off
lcDownloadURL = "http://www.crwflags.com/fotw/misc/fr%28dep.gif"
lcDownloadLoc ="frdep.gif"
lnResult = DeleteUrlCacheEntry(lcDownloadURL)
lnResult = URLDownloadToFile(0, lcDownloadURL, lcDownloadLoc , 0,0)
If lnResult = 0
Wait Window "Download "+lcDownloadLoc +" Complete" Nowait
*Else
*!* Messagebox("Download fails")
Endi
Thisform.image1.Picture=m.lcDownloadLoc
endproc
Procedure Load
Declare Integer URLDownloadToFile In urlmon.Dll Integer pCaller, String szURL, String szFileName, Integer dwReserved, Integer lpfnCB
Declare Integer DeleteUrlCacheEntry In wininet String lpszUrlName
Create Cursor ycurs (x i,Y i,img c(100),Info m)
Endproc
Procedure Unload
*when close the form, the cursor yet exists.can copy it in a ycoord.dbf table (or when unload this form)
If Messagebox("Save the cursor gathered to ycoord.dbf?",4+64)=6
Sele ycurs
Copy To ycoord.Dbf
Endi
Endproc
Procedure image1.MouseDown
Lparameters nButton, nShift, nXCoord, nYCoord
With Thisform
.ForeColor=255
.DrawWidth=12
.FillStyle=0
.FillColor=255
.PSet(nXCoord,nYCoord)
Endwith
Insert Into ycurs Values(nXCoord,nYCoord,"","")
Endproc
Procedure Destroy
Clea Events
Endproc
Enddefine
*
*-- EndDefine: asup
Click on code to select [then copy] -click outside to deselect
*2*the cursor calculated previously is made to work in this code to build a clickable map on a picture.
Set Defa To Addbs(Justpath(Sys(16,1)))
Publi yform
yform=Newobject("ymap")
yform.Show
Read Events
Retu
*
Define Class ymap As Form
Top = 0
Left = 0
Height = 602
Width = 921
ShowWindow = 2
Caption = "Fake Demo form-Click on any region"
BackColor = Rgb(212,208,200)
Name = "Form1"
Add Object image1 As Image With ;
Anchor = 15, ;
Picture = "frdep.gif", ;
Height = 400, ;
Left = 12, ;
MousePointer = 1, ;
Top = 12, ;
Width = 404, ;
Name = "Image1"
Add Object image2 As Image With ;
Anchor = 15, ;
Stretch = 1, ;
BackStyle = 0, ;
BorderStyle = 1, ;
Height = 180, ;
Left = 516, ;
Top = 24-10, ;
Visible = .F., ;
Width = 288, ;
Name = "Image2"
Add Object edit1 As EditBox With ;
FontBold = .T., ;
FontSize = 12, ;
Anchor = 15, ;
BackStyle = 0, ;
BorderStyle = 0, ;
Height = 229, ;
Left = 456, ;
Top = 348, ;
scrollbars=0,;
Visible = .F., ;
Width = 444, ;
ForeColor = Rgb(0,0,255), ;
Name = "Edit1"
Add Object label1 As Label With ;
AutoSize = .T., ;
FontBold = .T., ;
FontSize = 24, ;
Anchor = 768, ;
Caption = "", ;
Height = 25, ;
Left = 144, ;
Top = 444, ;
Visible = .F., ;
Width = 2, ;
ForeColor = Rgb(255,0,0), ;
BackColor = Rgb(255,255,128), ;
Name = "Label1"
Add Object command1 As CommandButton With ;
Top = 504,;
Left = 180,;
Height = 25,;
Width = 85,;
FontBold = .T.,;
FontSize = 10,;
Anchor = 768,;
Caption = "Circuit",;
MousePointer = 15,;
ForeColor = Rgb(0,0,255),;
BackColor = Rgb(128,255,0),;
Name = "Command1"
Add Object yhelp As CommandButton With ;
Top = 504,;
Left = 180+100,;
width=32,;
height=25,;
FontBold = .T.,;
FontSize = 16,;
Forecolor=Rgb(0,255,0),;
Anchor = 768,;
Caption = "?",;
MousePointer = 15,;
ForeColor = Rgb(0,0,255),;
BackColor = Rgb(128,255,0),;
Name = "yHelp"
Add Object combo1 As ComboBox With ;
Anchor=768, ;
Height = 25,;
Left = 48,;
Top = 504,;
Width = 50,;
Name = "Combo1"
Add Object yimg As Image With ;
Picture = "frdep.gif",;
Stretch = 2,;
Height = 1,;
Left = 444,;
Top = 252,;
Visible = .F.,;
Width = 1,;
Name = "yimg"
Add Object check1 As Checkbox With ;
Top = 504,;
Left = 276+40,;
Height = 17,;
Width = 60,;
Anchor = 768,;
Alignment = 0,;
BackStyle = 0,;
Caption = "Zoom",;
Name = "Check1"
Procedure yimg.Click
With This
.Width=1
.Height=1
.Visible=.F.
.Parent.check1.Value=0
Endwith
Endproc
Procedure check1.InteractiveChange
Thisform.Cls
If This.Value=1
With Thisform.yimg
.Left=0+.Parent.image1.Left
.Top=0+.Parent.image1.Top
.Width =.Parent.Width
.Height=.Parent.Height
DoEvents
*kx=(.width/thisform.image1.width)
*ky=(.height/thisform.image1.height)
.Visible=.T.
.ZOrder(0)
Endwith
*with thisform
*.forecolor=255
*.drawWidth=6
*sele ycurs
*scan
*.forecolor=255
*if recno()=1
*.pset(x*kx,y*ky)
*endi
*.Line(x*kx,y*ky)
*.forecolor=rgb(0,255,0)
*.circle(10,x*kx,y*ky)
*endscan
*endwith
Endi
Endproc
Procedure command1.Click
With Thisform
.ForeColor=255
.DrawWidth=6
For i=1 To 99
x=Eval(".sh"+Trans(i))
.ForeColor=255
If i=1
.PSet(x.Left+10,x.Top+10)
Endi
.Line(x.Left+10,x.Top+10)
.ForeColor=Rgb(0,255,0)
.Circle(10,x.Left+10,x.Top+10)
Endfor
Endwith
Endproc
Procedure combo1.Click
Local xshape
xshape=Eval("thisform.sh"+This.Value)
With xshape
.MouseDown(1)
Endwith
Endproc
Procedure combo1.Init
With This
For i=1 To 99
.AddItem( Trans(i))
Endfor
.ListIndex=1
.Style=2
Endwith
Endproc
Procedure my
Lparameters nButton, nShift, nXCoord, nYCoord
*--- aevent create an array laEvents
Aevents( myArray, 0)
*--- reference the calling object
loObject = myArray[1]
Local m.u ,m.x0
m.u=Int(Val(Substr(loObject.Name,3)))
Sele ycurs
Go m.u
m.x0=loObject.BackColor
loObject.BackColor=Rgb(0,255,0)
With Thisform
.DrawWidth=10
.Circle(20,x,Y)
Endwith
sleep(700)
loObject.BackColor=m.x0
Thisform.Cls
With Thisform
.image2.Picture=img
.image2.Visible=.T.
.edit1.Value=Info
.edit1.ForeColor=Rgb(255*Rand(),255*Rand(),255*Rand())
.edit1.Visible=.T.
.label1.Caption="zone"+Substr(loObject.Name,3)
.label1.Visible=.T.
Endwith
Endproc
Procedure Load
Set Curs Off
Declare Integer Sleep In kernel32 Integer
Declare Integer URLDownloadToFile In urlmon.Dll Integer pCaller, String szURL, String szFileName, Integer dwReserved, Integer lpfnCB
Declare Integer DeleteUrlCacheEntry In wininet String lpszUrlName
*sele * from ycoord into cursor ycurs readwrite &&if table ycoord prepared before
Create Cursor ycurs(num i,x i,Y i,img c(100),Info m)
Insert Into ycurs Values(0,44,130,"","")
Insert Into ycurs Values(0,74,130,"","")
Insert Into ycurs Values(0,113,140,"","")
Insert Into ycurs Values(0,76,152,"","")
Insert Into ycurs Values(0,107,171,"","")
Insert Into ycurs Values(0,143,175,"","")
Insert Into ycurs Values(0,139,146,"","")
Insert Into ycurs Values(0,129,102,"","")
Insert Into ycurs Values(0,155,102,"","")
Insert Into ycurs Values(0,166,121,"","")
Insert Into ycurs Values(0,165,150,"","")
Insert Into ycurs Values(0,202,132,"","")
Insert Into ycurs Values(0,227,129,"","")
Insert Into ycurs Values(0,218,114,"","")
Insert Into ycurs Values(0, 195,102,"","")
Insert Into ycurs Values(0, 194, 80,"","")
Insert Into ycurs Values(0, 230, 44,"","")
Insert Into ycurs Values(0, 264, 48,"","")
Insert Into ycurs Values(0, 230, 68,"","")
Insert Into ycurs Values(0, 230, 88,"","")
Insert Into ycurs Values(0, 264, 82,"","")
Insert Into ycurs Values(0, 302, 78,"","")
Insert Into ycurs Values(0, 322,107,"","")
Insert Into ycurs Values(0, 288,107,"","")
Insert Into ycurs Values(0, 248,123,"","")
Insert Into ycurs Values(0, 119,204,"","")
Insert Into ycurs Values(0, 155,213,"","")
Insert Into ycurs Values(0, 178,212,"","")
Insert Into ycurs Values(0, 179,184,"","")
Insert Into ycurs Values(0, 200,165,"","")
Insert Into ycurs Values(0, 228,153,"","")
Insert Into ycurs Values(0,206,202,"","")
Insert Into ycurs Values(0,238,192,"","")
Insert Into ycurs Values(0,266,192,"","")
Insert Into ycurs Values(0,264,160,"","")
Insert Into ycurs Values(0,284,133,"","")
Insert Into ycurs Values(0,316,148,"","")
Insert Into ycurs Values(0,344,123,"","")
Insert Into ycurs Values(0,354,102,"","")
Insert Into ycurs Values(0,385,115,"","")
Insert Into ycurs Values(0,351,138,"","")
Insert Into ycurs Values(0,375,152,"","")
Insert Into ycurs Values(0,343,162,"","")
Insert Into ycurs Values(0,301,172,"","")
Insert Into ycurs Values(0,301,209,"","")
Insert Into ycurs Values(0,333,205,"","")
Insert Into ycurs Values(0,342,185,"","")
Insert Into ycurs Values(0,368,165,"","")
Insert Into ycurs Values(0,258,222,"","")
Insert Into ycurs Values(0,228,234,"","")
Insert Into ycurs Values(0,200,245,"","")
Insert Into ycurs Values(0,168,253,"","")
Insert Into ycurs Values(0,143,249,"","")
Insert Into ycurs Values(0,145,293,"","")
Insert Into ycurs Values(0,184,280,"","")
Insert Into ycurs Values(0,217,271,"","")
Insert Into ycurs Values(0,254,251,"","")
Insert Into ycurs Values(0,284,252,"","")
Insert Into ycurs Values(0,299,246,"","")
Insert Into ycurs Values(0,316,238,"","")
Insert Into ycurs Values(0,355,236,"","")
Insert Into ycurs Values(0,357,255,"","")
Insert Into ycurs Values(0,336,265,"","")
Insert Into ycurs Values(0,281,277,"","")
Insert Into ycurs Values(0,248,277,"","")
Insert Into ycurs Values(0,213,299,"","")
Insert Into ycurs Values(0,175,311,"","")
Insert Into ycurs Values(0,136,327,"","")
Insert Into ycurs Values(0,131,359,"","")
Insert Into ycurs Values(0,162,368,"","")
Insert Into ycurs Values(0,173,342,"","")
Insert Into ycurs Values(0,192,329,"","")
Insert Into ycurs Values(0,241,313,"","")
Insert Into ycurs Values(0,267,306,"","")
Insert Into ycurs Values(0,299,296,"","")
Insert Into ycurs Values(0,321,296,"","")
Insert Into ycurs Values(0,353,297,"","")
Insert Into ycurs Values(0,351,319,"","")
Insert Into ycurs Values(0,379,327,"","")
Insert Into ycurs Values(0,356,346,"","")
Insert Into ycurs Values(0,323,327,"","")
Insert Into ycurs Values(0,322,346,"","")
Insert Into ycurs Values(0,298,329,"","")
Insert Into ycurs Values(0,264,346,"","")
Insert Into ycurs Values(0,228,337,"","")
Insert Into ycurs Values(0,233,366,"","")
Insert Into ycurs Values(0,238,393,"","")
Insert Into ycurs Values(0,210,378,"","")
Insert Into ycurs Values(0,202,355,"","")
Insert Into ycurs Values(0, 28,271,"","")
Insert Into ycurs Values(0, 20,281,"","")
Insert Into ycurs Values(0, 44,270,"","")
Insert Into ycurs Values(0, 55,259,"","")
Insert Into ycurs Values(0, 42,244,"","")
Insert Into ycurs Values(0, 74,265,"","")
Insert Into ycurs Values(0, 58,281,"","")
Insert Into ycurs Values(0, 42,293,"","")
Insert Into ycurs Values(0, 56,357,"","")
Insert Into ycurs Values(0, 52,382,"","")
Local m.myvar,gnbre,i
TEXT to m.myvar noshow
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vel risus eget lorem feugiat
fermentum nec a turpis. Phasellus purus sem, mollis ac posuere eget, ornare vel orci. Sed ac rutrum
nulla. Aenean ultrices eget lectus eu efficitur. In hac habitasse platea dictumst. Nulla in iaculis nisi.
Nullam et pulvinar tellus. Donec arcu dui, efficitur a odio non, porta congue dolor. Aenean viverra
auctor sagittis. Integer lobortis dignissim auctor. Proin et volutpat massa.
ENDTEXT
Local gnbre
gnbre=Adir(gabase, Home(1)+"graphics\icons\misc\*.ico") &&some pictures as icons here (88)
Repl All num With Recno()
Locate
i=1
Scan
If i<=gnbre
Repl img With Home(1)+"graphics\icons\misc\"+Allt(gabase(i,1))
Else
Repl img With Home(1)+"graphics\icons\misc\"+Allt(gabase(Recno()-gnbre,1))
Endi
i=i+1
Repl Info With Trans(Recno())+". "+m.myvar
Endscan
*brow
Endproc
Procedure Init
lcDownloadURL = "http://www.crwflags.com/fotw/misc/fr%28dep.gif"
lcDownloadLoc ="frdep.gif"
lnResult = DeleteUrlCacheEntry(lcDownloadURL)
lnResult = URLDownloadToFile(0, lcDownloadURL, lcDownloadLoc , 0,0)
If lnResult = 0
Wait Window "Download "+lcDownloadLoc +" Complete" Nowait
*Else
*!* Messagebox("Download fails")
Endi
Thisform.image1.Picture=m.lcDownloadLoc
Thisform.yimg.Picture=m.lcDownloadLoc
Sele ycurs
Locate
Scan
i=Recno()
With Thisform
.AddObject("sh"+Trans(i),"shape")
With Eval(".sh"+Trans(i))
.Left=x-10
.Top=Y-10
.Width=20
.Height=20
.BackStyle=1 &&0
.BorderStyle=0
.MousePointer=15
.Visible=.T.
Endwith
Bindevent(Eval("thisform.sh"+Trans(i)),"mousedown",Thisform,"my")
Endwith
Endscan
Thisform.SetAll("drawmode",9,"shape")
Endproc
Procedure yhelp.Click
Local m.myvar
TEXT to m.myvar noshow
This is a country Fr* map (can be any porepared map) with subdivisions in zones as 99 regions.
-in first step must gather all pointswith tjeir coordinates x,y in a cursor or physical table.
in this cursor add other fields can desserve the project(images,information...)
that is done by executing the first form yform_shapes0.cx
-in second step run the form yform_shape.scx
its exactly the same form as the first (dont change dimensions because the points are with their coordinates x,y).
this builds a clickable map.
any ckicl on any region fires an image+relative informations (can add other things...)
Any click on combo does same thing+draw temporarly circle n region cibled
Clicking the button circuit draw all regions centers (invisible shapes) and lines.
here a region is defined with a simpe rectangular shape.for more complexity can define a region entierely
with a curve as polypoint(many points x,y attached to a region....as an SVG does.)
Yousfi Benameur 10 march 2016
ENDTEXT
Messagebox(m.myvar,0+32+4096,"Summary help")
Procedure Destroy
Clea Events
Endproc
Enddefine
*
*-- EndDefine: ymap
Click on code to select [then copy] -click outside to deselect
*3*recquires vfp9 (polypoint array)
*the map is built point by point by the first code *1* and Algeria source map picture.
publi yform
yform=newObject("ymap_algeria")
yform.show
read events
retu
*
DEFINE CLASS ymap_algeria AS form
Top = 4
Left = 1
Height = 620
Width = 950
ShowWindow = 2
ScrollBars = 3
picture="" &&can populate picture and make shape transparent
Caption = "Shapes & map on a form - Drag the map by mouseDown"
BackColor = RGB(212,208,200)
xoffset = .F.
yoffset = .F.
Name = "Form1"
ADD OBJECT ymap AS shape WITH ;
Top = 27, ;
Left = 120, ;
Height = 588, ;
Width = 828, ;
Anchor = 0, ;
BackStyle = 0, ;
BorderWidth = 3, ;
FillStyle = 7, ;
MousePointer = 15, ;
SpecialEffect = 0, ;
FillColor = RGB(0,0,255), ;
BorderColor = RGB(128,0,255), ;
ZOrderSet = 21, ;
PolyPoints = "THIS.aPoly", ;
Name = "ymap"
ADD OBJECT container1 AS ycont WITH ;
Top = 0, ;
Left = 0, ;
Width = 130, ;
Height = 336, ;
BackStyle = 0, ;
BorderWidth = 0, ;
BorderColor = RGB(0,0,255), ;
Name = "Container1"
PROCEDURE DragDrop
LPARAMETERS oSource, nXCoord, nYCoord
oSource.Left = nXCoord - THISFORM.XOffset
oSource.Top = nYCoord - THISFORM.YOffset
ENDPROC
PROCEDURE Load
Create Cursor ycurs (x i,Y i)
insert into ycurs values(532,37 )
insert into ycurs values(523,35 )
insert into ycurs values(513,40 )
insert into ycurs values(503,33 )
insert into ycurs values(493,37 )
insert into ycurs values(480,36 )
insert into ycurs values(469,41 )
insert into ycurs values(460,41 )
insert into ycurs values(453,46 )
insert into ycurs values(445,41 )
insert into ycurs values(431,39 )
insert into ycurs values(419,41 )
insert into ycurs values(412,42 )
insert into ycurs values(402,43 )
insert into ycurs values(393,46 )
insert into ycurs values(381,46 )
insert into ycurs values(366,51 )
insert into ycurs values(358,50 )
insert into ycurs values(347,56 )
insert into ycurs values(335,59 )
insert into ycurs values(328,64 )
insert into ycurs values(322,71 )
insert into ycurs values(313,69 )
insert into ycurs values(305,74 )
insert into ycurs values(296,79 )
insert into ycurs values(290,84 )
insert into ycurs values(280,90 )
insert into ycurs values(273,91 )
insert into ycurs values(280,98 )
insert into ycurs values(284,107 )
insert into ycurs values(282,117 )
insert into ycurs values(282,125)
insert into ycurs values(283,134 )
insert into ycurs values(284,143 )
insert into ycurs values(288,155 )
insert into ycurs values(294,164 )
insert into ycurs values(295,174 )
insert into ycurs values(286,180 )
insert into ycurs values(277,177 )
insert into ycurs values(267,177 )
insert into ycurs values(258,176 )
insert into ycurs values(248,179 )
insert into ycurs values(244,185 )
insert into ycurs values(235,188 )
insert into ycurs values(228,190 )
insert into ycurs values(226,199 )
insert into ycurs values(227,205 )
insert into ycurs values(220,213 )
insert into ycurs values(206,220 )
insert into ycurs values(197,220 )
insert into ycurs values(190,233 )
insert into ycurs values(181,239 )
insert into ycurs values(171,239 )
insert into ycurs values(159,238 )
insert into ycurs values(153,244)
insert into ycurs values(145,241 )
insert into ycurs values(133,244 )
insert into ycurs values(128,250 )
insert into ycurs values(114,256 )
insert into ycurs values(106,262 )
insert into ycurs values( 99,268 )
insert into ycurs values( 97,278 )
insert into ycurs values(97,289 )
insert into ycurs values(95,301 )
insert into ycurs values(100,309 )
insert into ycurs values(110,320 )
insert into ycurs values(122,331 )
insert into ycurs values(130,339 )
insert into ycurs values(138,346 )
insert into ycurs values(150,351 )
insert into ycurs values(163,360 )
insert into ycurs values(172,371 )
insert into ycurs values(177,376)
insert into ycurs values(188,382 )
insert into ycurs values(199,393 )
insert into ycurs values(210,398 )
insert into ycurs values(222,406 )
insert into ycurs values(230,415 )
insert into ycurs values(234,417 )
insert into ycurs values(245,426 )
insert into ycurs values(253,433 )
insert into ycurs values(259,442 )
insert into ycurs values(272,448 )
insert into ycurs values(280,454 )
insert into ycurs values(288,463 )
insert into ycurs values(295,466 )
insert into ycurs values(306,473 )
insert into ycurs values(313,479 )
insert into ycurs values(317,481 )
insert into ycurs values(325,485 )
insert into ycurs values(331,489)
insert into ycurs values(337,494 )
insert into ycurs values(342,499 )
insert into ycurs values(348,508 )
insert into ycurs values(352,517 )
insert into ycurs values(362,521)
insert into ycurs values(365,528 )
insert into ycurs values(374,529 )
insert into ycurs values(380,532 )
insert into ycurs values(389,536 )
insert into ycurs values(398,536 )
insert into ycurs values(402,548 )
insert into ycurs values(403,551 )
insert into ycurs values(403,557 )
insert into ycurs values(405,563 )
insert into ycurs values(417,565 )
insert into ycurs values(426,563)
insert into ycurs values(436,562 )
insert into ycurs values(444,558)
insert into ycurs values(459,555 )
insert into ycurs values(465,553 )
insert into ycurs values(473,550 )
insert into ycurs values(485,543 )
insert into ycurs values(497,531 )
insert into ycurs values(507,523 )
insert into ycurs values(515,514 )
insert into ycurs values(530,504)
insert into ycurs values(543,492 )
insert into ycurs values(556,484 )
insert into ycurs values(573,476 )
insert into ycurs values(583,467)
insert into ycurs values(596,460 )
insert into ycurs values(607,448)
insert into ycurs values(620,437 )
insert into ycurs values(636,426)
insert into ycurs values(633,412 )
insert into ycurs values(623,403)
insert into ycurs values(613,396 )
insert into ycurs values(602,396)
insert into ycurs values(592,397 )
insert into ycurs values(586,387 )
insert into ycurs values(581,373 )
insert into ycurs values(574,359 )
insert into ycurs values(565,353 )
insert into ycurs values(571,344 )
insert into ycurs values(578,336 )
insert into ycurs values(573,327 )
insert into ycurs values(573,318 )
insert into ycurs values(576,310)
insert into ycurs values(578,304 )
insert into ycurs values(574,290 )
insert into ycurs values(575,274 )
insert into ycurs values(575,262 )
insert into ycurs values(566,248 )
insert into ycurs values(559,232 )
insert into ycurs values(564,218 )
insert into ycurs values(557,203 )
insert into ycurs values(551,184 )
insert into ycurs values(543,175)
insert into ycurs values(534,166 )
insert into ycurs values(529,155 )
insert into ycurs values(521,148 )
insert into ycurs values(515,142 )
insert into ycurs values(511,137 )
insert into ycurs values(510,125 )
insert into ycurs values(514,117 )
insert into ycurs values(521,110 )
insert into ycurs values(526,105 )
insert into ycurs values(526,99)
insert into ycurs values(529,88 )
insert into ycurs values(529,82 )
insert into ycurs values(527,71 )
insert into ycurs values(523,68 )
insert into ycurs values(523,62 )
insert into ycurs values(526,58 )
insert into ycurs values(528,49 )
insert into ycurs values(533,43 )
sele ycurs
ENDPROC
PROCEDURE Init
with this
.width=sysmetric(1)-5
.height=sysmetric(2)-34
.left=-5
.top=0
.setall("mousepointer",15,"commandbutton")
.setall("backcolor",rgb(0,255,0),"commandbutton")
.setall("anchor",768,"commandbutton")
endwith
ENDPROC
PROCEDURE Destroy
close data all
clea events
ENDPROC
PROCEDURE ymap.Click
local m.myvar
text to m.myvar noshow
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vel risus eget lorem feugiat
fermentum nec a turpis. Phasellus purus sem, mollis ac posuere eget, ornare vel orci. Sed ac rutrum
nulla. Aenean ultrices eget lectus eu efficitur. In hac habitasse platea dictumst. Nulla in iaculis nisi.
Nullam et pulvinar tellus. Donec arcu dui, efficitur a odio non, porta congue dolor. Aenean viverra
auctor sagittis. Integer lobortis dignissim auctor. Proin et volutpat massa.
Cras vitae felis venenatis, egestas sem quis, sodales neque. Donec venenatis hendrerit odio, non
sollicitudin consectetur. Vestibulum id bibendum est. Ut vel lacus sapien. Quisque eget molestie
sem. Integer eget purus eu orci molestie aliquam quis in ante. Integer a magna eget lectus finibus
porttitor. Donec fringilla sapien a quam aliquet, pellentesque blandit nisl placerat. Nam hendrerit
velit vel ex aliquam, eget convallis ante mollis.
*end*
endtext
messagebox(m.myvar,0+32+4096,"Algeria map")
ENDPROC
PROCEDURE ymap.MouseMove
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF nButton = 1 && Left button
THISFORM.XOffset = nXCoord - THIS.Left
THISFORM.YOffset = nYCoord - THIS.Top
THIS.Drag
ENDIF
ENDPROC
PROCEDURE ymap.DragDrop
LPARAMETERS oSource, nXCoord, nYCoord
THIS.Parent.DragDrop(oSource, nXCoord, nYCoord)
thisform.container1.zorder(0)
ENDPROC
PROCEDURE ymap.Init
this.addproperty("w0",this.width)
this.addproperty("h0",this.height)
this.w0=this.width
this.h0=this.height
THIS.AddProperty("aPoly[1,1]")
sele ycurs
DIMENSION THISform.ymap.aPoly[reccount(),2]
scan
x=x+100
y=y+100
thisform.ymap.aPoly[recno(),1]=100*x/thisform.ymap.width
thisform.ymap.aPoly[recno(),2]=100*y/thisform.ymap.height
endscan
this.zorder(0)
ENDPROC
ENDDEFINE
*
*-- EndDefine: ymap_Algeria
DEFINE CLASS ycont AS container
Top = 0
Left = 0
Width = 115
Height = 336
BackStyle = 0
BorderWidth = 0
BorderColor = RGB(0,0,255)
Name = "ycont"
ADD OBJECT check2 AS checkbox WITH ;
Top = 38, ;
Left = 7, ;
Height = 29, ;
Width = 101, ;
FontBold = .T., ;
FontSize = 10, ;
Anchor = 768, ;
AutoSize = .F., ;
Alignment = 0, ;
Caption = "Backstyle", ;
Style = 1, ;
ForeColor = RGB(255,0,0), ;
BackColor = RGB(128,255,0), ;
Name = "Check2"
ADD OBJECT check1 AS checkbox WITH ;
Top = 68, ;
Left = 7, ;
Height = 27, ;
Width = 95, ;
Anchor = 768, ;
AutoSize = .T., ;
Alignment = 0, ;
Caption = "Draw the map", ;
MousePointer = 15, ;
Style = 1, ;
BackColor = RGB(128,255,0), ;
Name = "Check1"
ADD OBJECT command7 AS commandbutton WITH ;
Top = 96, ;
Left = 7, ;
Height = 25, ;
Width = 73, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "FillColor", ;
BackColor = RGB(128,255,0), ;
Name = "Command7"
ADD OBJECT command3 AS commandbutton WITH ;
Top = 126, ;
Left = 7, ;
Height = 25, ;
Width = 73, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Fillstyle 0-7", ;
BackColor = RGB(128,255,0), ;
Name = "Command3"
ADD OBJECT check3 AS checkbox WITH ;
Top = 158, ;
Left = 7, ;
Height = 29, ;
Width = 87, ;
FontBold = .T., ;
FontSize = 10, ;
Anchor = 768, ;
AutoSize = .T., ;
Alignment = 0, ;
Caption = "Rotation+-", ;
Style = 1, ;
ForeColor = RGB(255,0,0), ;
BackColor = RGB(128,255,0), ;
Name = "Check3"
ADD OBJECT command4 AS commandbutton WITH ;
Top = 195, ;
Left = 7, ;
Height = 25, ;
Width = 97, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Center shape", ;
BackColor = RGB(128,255,0), ;
Name = "Command4"
ADD OBJECT command6 AS commandbutton WITH ;
Top = 228, ;
Left = 7, ;
Height = 25, ;
Width = 97, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Zoom 2x", ;
BackColor = RGB(128,255,0), ;
Name = "Command6"
ADD OBJECT olecontrol1 AS olecontrol WITH ;
oleClass="MSComctlLib.Slider.2",;
Top = 260, ;
Left = 7, ;
Height = 24, ;
Width = 100, ;
Anchor = 768, ;
Name = "Olecontrol1"
ADD OBJECT command8 AS commandbutton WITH ;
Top = 297, ;
Left = 7, ;
Height = 25, ;
Width = 140, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Drawmodes(1-16)", ;
BackColor = RGB(128,255,0), ;
Name = "Command8"
ADD OBJECT line1 AS line WITH ;
BorderWidth = 6, ;
Height = 0, ;
Left = 37, ;
MousePointer = 15, ;
Top = 8, ;
Width = 36, ;
Name = "Line1"
ADD OBJECT line2 AS line WITH ;
BorderWidth = 6, ;
Height = 0, ;
Left = 37, ;
MousePointer = 15, ;
Top = 14, ;
Width = 36, ;
Name = "Line2"
ADD OBJECT line3 AS line WITH ;
BorderWidth = 6, ;
Height = 0, ;
Left = 37, ;
MousePointer = 15, ;
Top = 21, ;
Width = 36, ;
Name = "Line3"
ADD OBJECT shape1 AS shape WITH ;
Top = 1, ;
Left = 25, ;
Height = 25, ;
Width = 61, ;
BackStyle = 0, ;
BorderStyle = 0, ;
BorderWidth = 0, ;
MousePointer = 15, ;
Name = "Shape1"
PROCEDURE Init
with this
for i=1 to .controlcount
.controls(i).visible=.f.
endfor
.backstyle=0
.borderwidth=0
.height=30
.line1.visible=.t.
.line2.visible=.t.
.line3.visible=.t.
.shape1.visible=.t.
endwith
ENDPROC
PROCEDURE check2.InteractiveChange
if this.value=1
thisform.ymap.backStyle=1
else
thisform.ymap.backStyle=0
endi
ENDPROC
PROCEDURE check1.InteractiveChange
if this.value=1
this.caption="Clear map"
sele ycurs
locate
with thisform
.drawWidth=12
.forecolor=255
.fillstyle=0
.fillcolor=rgb(0,255,0)
.pset(x+thisform.ymap.left,y+thisform.ymap.top)
endwith
scan
thisform.line(x+thisform.ymap.left,y+thisform.ymap.top)
endscan
else
this.caption="Draw the map"
thisform.cls
endi
ENDPROC
PROCEDURE command7.Click
local m.xcolor
m.xcolor=getcolor()
if m.xcolor=-1
retu .f.
endi
thisform.ymap.fillcolor=m.xcolor
ENDPROC
PROCEDURE command3.Click
for i=0 to 7
thisform.ymap.fillStyle=i
thisform.ymap.fillcolor=rgb(255*rand(),255*rand(),255*rand())
wait window "FillStyle="+trans(i) nowait
inke(1)
endfor
ENDPROC
PROCEDURE check3.InteractiveChange
if this.value=0
this.caption="Rotation -"
thisform.ymap.rotation=360
WITH THISform
FOR i = 1 TO 35
INKEY(.1,"H")
.ymap.Rotation = .ymap.Rotation - 10
ENDFOR
ENDWITH
THISFORM.SetAll("Rotation",0,"Shape")
else
this.caption="Rotation+"
WITH THISform
FOR i = 1 TO 35
INKEY(.1,"H")
.ymap.Rotation = .ymap.Rotation + 10
ENDFOR
ENDWITH
THISFORM.SetAll("Rotation",0,"Shape")
endi
ENDPROC
PROCEDURE command4.Click
with thisform.ymap
.left=(thisform.width-.width)/2
.top=(thisform.height-.height)/2
endwith
ENDPROC
PROCEDURE command6.Click
with thisform.ymap
.width=2*.w0
.height=2*.h0
endwith
thisform.refresh
ENDPROC
PROCEDURE olecontrol1.Change
*** Événement de contrôle ActiveX ***
with thisform.ymap
.width=.w0*(1+this.value/100)
.height=int(.h0*(1+this.value/100))
endwith
thisform.refresh
ENDPROC
PROCEDURE command8.Click
for i=1 to 16
thisform.ymap.drawmode=i
inke(1)
endfor
thisform.ymap.drawmode=13
ENDPROC
PROCEDURE shape1.Click
if this.parent.height>30
this.parent.height=30
with this.parent
for i=1 to .controlcount
.controls(i).visible=.f.
endfor
.backstyle=0
.borderwidth=0
.height=30
.line1.visible=.t.
.line2.visible=.t.
.line3.visible=.t.
.shape1.visible=.t.
endwith
else
this.parent.height=336
with this.parent
for i=1 to .controlcount
.controls(i).visible=.t.
endfor
.backstyle=0
.borderwidth=0 &&1
.height=336
endwith
endi
this.parent.zorder(0)
ENDPROC
ENDDEFINE
*
*-- EndDefine: ycont
Click on code to select [then copy] -click outside to deselect
*4*
*the code asks for the gdiplusX location (or copy it (vcx/vct) in the source folder)+system.app location.
*draw a gdiplusX map with data gathered in a cursor(see first code)
*can change colors,view/save in msPaint or save directly as a PNG
Publi m.yrep
m.yrep=Addbs(Justpath(Sys(16,1)))
set defa to (yrep)
*download a photo for background
Declare Integer Sleep In kernel32 Integer
Declare Integer URLDownloadToFile In urlmon.Dll Integer pCaller, String szURL, String szFileName, Integer dwReserved, Integer lpfnCB
Declare Integer DeleteUrlCacheEntry In wininet String lpszUrlName
lcDownloadURL = "http://img.over-blog-kiwi.com/1/43/54/07/20160313/ob_1f4998_sam-2260-resized.JPG"
lcDownloadLoc ="kantara.jpg"
lnResult = DeleteUrlCacheEntry(lcDownloadURL)
lnResult = URLDownloadToFile(0, lcDownloadURL, lcDownloadLoc , 0,0)
If lnResult = 0
Wait Window "Download "+lcDownloadLoc +" Complete" Nowait
*Else
*!* Messagebox("Download fails")
Endi
Do Locfile("system.app") &&point to system.app
Set Classlib To locfile("gdiplusX") AddI && hardcode it in the code definitively
Publi yform
yform=Newobject("ymap_algeria")
yform.Show
Release Classlib "gdiplusX"
Read Events
Return
Define Class ymap_algeria As Form
Height = 714
Width = 995
ShowWindow = 2
ShowTips = .T.
AutoCenter = .T.
Caption = "GdiPlusX Algeria MAP - Drawing polygons"
KeyPreview = .T.
WindowState = 2
BackColor = Rgb(0,0,0)
ycolor1 = 255
ycolor2 = 1254
nmode = 3
nbr = 5
ycolor0 = 0
ycli = 0
ypict=.f.
Name = "Form1"
Add Object imgcanvas As imgcanvas With ;
Anchor = 15, ;
Stretch = 2, ;
Height = 672, ;
Left = 0, ;
Top = 0, ;
Width = 997, ;
drawWhenInvisible=.T.,;
Name = "imgcanvas"
Add Object command2 As CommandButton With ;
Top = 686-5, ;
Left = 110, ;
Height = 27, ;
Width = 200 ,;
Anchor = 768, ;
Caption = "Re click to Switch multi colors", ;
ToolTipText = "acolor(5)=.color.brown", ;
BackColor = Rgb(0,255,0), ;
Name = "Command2"
Add Object ycom As CommandButton With ;
Top = 686-5, ;
Left = 320, ;
Height = 25, ;
Width = 73, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Bgd Picture", ;
BackColor = Rgb(0,255,0), ;
Name = "ycom"
Add Object command5 As CommandButton With ;
Top = 681-10, ;
Left = 608, ;
Height = 35, ;
Width = 36, ;
Anchor = 768, ;
Picture = Home(1)+"graphics\icons\misc\camera.ico", ;
Caption = "", ;
ToolTipText = "Capture image+View", ;
Name = "Command5"
Add Object command6 As CommandButton With ;
Top = 686-5, ;
Left = 685-30, ;
Height = 25, ;
Width = 73, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Save", ;
BackColor = Rgb(0,255,0), ;
Name = "Command6"
Procedure ycom.click
thisform.ypict=.t.
thisform.imgcanvas.draw
endproc
Procedure ypolygon
Lparameters nb
* build polygon array
Sele ycurs
Count To xx &&For Not Deleted()
locate
Dimension Mat0(xx,2)
i=1
v=""
*Do While Not Eof()
scan
If Not Deleted()
Mat0(i,1)=nx
Mat0(i,2)=ny
v=v+"Mat0("+Allt(Str(i))+",1)="+Allt(Str(nx))+Chr(13)+"Mat0("+Allt(Str(i))+",2)="+Allt(Str(ny))+Chr(13)
i=i+1
Endi
*Skip
*Enddo
endscan
vv="dimension Mat0("+Allt(Str(i-1))+",2)"+Chr(13) +v
TEXT to myvar noshow
<<vv>>
ENDTEXT
Endproc
Procedure ypat
With _Screen.System.Drawing
pth = .Drawing2D.GraphicsPath.New()
nn=Alen(Mat0)
aa=""
For i=1 To Alen(Mat0)-1 Step 2
pth.AddLine(.Point.New(Mat0(i),Mat0(i+1)),.Point.New(Mat0(i+2),Mat0(i+3)) )
aa=aa+Trans(".point.new("+Trans(Mat0(i))+ "," +Trans(Mat0(i+1))+ ")," +".point.new("+Trans(Mat0(i))+ "," +Trans(Mat0(i+1))+")")+Chr(13)
If i>nn-4
Exit
Endi
Endfor
pth.closeFigure()
Endwith
Return pth
Endproc
Procedure Init
Set Esca Off
Thisform.SetAll("mousepointer",15,"commandbutton")
Publi ii,pth,Mat0
ii=0
This.imgcanvas.Visible=.T.
This.imgcanvas.Left=This.Left
This.imgcanvas.Top=This.Top
This.imgcanvas.Width=This.Width
This.imgcanvas.Height=This.Height
Thisform.ycolor0=0 &&black
This.ycolor1=255
This.ycolor2=Rgb(0,255,0)
Sele ycurs
Thisform.nbr=Reccount()
thisform.caption="GdiPlusX Algeria MAP - Drawing polygons"
Endproc
Procedure activate
with this &&to make form.caption appears !
.width=.width+1
.width=.width-1
endwith
endproc
Procedure Destroy
Clea Events
Endproc
Procedure imgcanvas.beforedraw
Local yPath As xfcGraphicsPath
Local pgb As xfcPathGradientBrush
Local logfx
Local w,h
Thisform.nmode=Thisform.nmode+1
If Thisform.nmode>3
Thisform.nmode=1
Endi
logfx=This.ogfx
With _Screen.System.Drawing
logfx.SmoothingMode = .Drawing2D.SmoothingMode.AntiAlias
This.Clear(.Color.black) &&fromRGB(thisform.ycolor0))
Thisform.ypolygon(Thisform.nbr)
gnInférieur = 1
gnSupérieur = 10
num=Int((gnSupérieur - gnInférieur + 1) * Rand( ) + gnInférieur)
Do Case
Case num=1
yloBrush=".Brushes.gold"
Case num=2
yloBrush=".Brushes.blue"
Case num=3
yloBrush=".Brushes.green"
Case num=4
yloBrush=".Brushes.cyan"
Case num=5
yloBrush=".Brushes.red"
Case num=6
yloBrush=".Brushes.pink"
Case num=7
yloBrush=".Brushes.yellow"
Case num=8
yloBrush=".Brushes.white"
Case num=9
yloBrush=".Brushes.gray"
Case num=10
yloBrush=".Brushes.black"
Endcase
This.ogfx.FillPolygon(&yloBrush, @Mat0)
Pen = .Pen.New(.Color.fromrgb(255*Rand(),255*Rand(),255*Rand()), 4)
This.ogfx.DrawPolygon(Pen, @Mat0)
Pen.Dispose()
Thisform.ypat()
pgb=.Drawing2D.PathGradientBrush.New(pth)
pgb.CenterColor=.Color.White
pgb.SurroundColors=.Color.fromARGB(80,255*Rand(),255*Rand(),255*Rand())
if thisform.ypict=.f.
logfx.FillPath(pgb,pth)
pgb.Dispose()
else
if file("Kantara.jpg")
img = .IMAGE.FromFile("KANTARA.JPG")
pgb = .TextureBrush.New(img)
logfx.FillPath(pgb,pth)
pgb.Dispose()
endi
endi
*texte
Local loFont As xfcFont
Local loBrush As xfcLinearGradientBrush
Local loRectangleF As xfcRectangleF
Local loSizeF As xfcSizeF
ystring="Yousfi.overBlog.com/"
ystring1="ALGERIA MAP"
loFont = .Font.New("Arial Black",14, .FontStyle.Bold)
loFont1 = .Font.New("Batavia",36, .FontStyle.Bold)
loSizeF = logfx.MeasureString(ystring, loFont)
loSizeF1 = logfx.MeasureString(ystring1, loFont1)
loRectangleF =_Screen.System.Drawing.RectangleF.New(0,5,loSizeF.Width, loSizeF.Height)
loRectangleF1=_Screen.System.Drawing.RectangleF.New(10,This.Height/10-20,loSizeF1.Width, loSizeF1.Height)
Thisform.ycolor1=.Color.red
Thisform.ycolor2=.Color.cyan
loBrush = .Drawing2D.LinearGradientBrush.New(loRectangleF,;
Thisform.ycolor1, ;
Thisform.ycolor2,;
thisform.nmode)
loBrush1 = .Drawing2D.LinearGradientBrush.New(loRectangleF1,;
Thisform.ycolor2, ;
Thisform.ycolor1,;
thisform.nmode)
logfx.DrawString(ystring, loFont,loBrush, loRectangleF)
logfx.DrawString(ystring1, loFont1,loBrush1, loRectangleF1)
Endwith
Endproc
Procedure command2.Click
thisform.ypict=.f.
Thisform.ycolor0=".color.black"
Thisform.BackColor=0
ii=ii+1
If ii>10
ii=1
Endi
Do Case
Case ii=1
Thisform.ycolor1=".color.red"
Case ii=2
Thisform.ycolor1=".color.green"
Case ii=3
Thisform.ycolor1=".color.blue"
Case ii=4
Thisform.ycolor1=".color.cyan"
Case ii=5
Thisform.ycolor1=".color.yellow"
Case ii=6
Thisform.ycolor1=".color.magenta"
Case ii=7
Thisform.ycolor1=".color.gold"
Case ii=8
Thisform.ycolor1=".color.gray"
Case ii=9
Thisform.ycolor1=".color.black"
Case ii=10
Thisform.ycolor1=".color.purple"
Endcase
Thisform.imgcanvas.Visible=.T.
Thisform.imgcanvas.Draw()
Endproc
Procedure command5.Click
Thisform.imgcanvas.obmp.toclipboard()
Run/n3 mspaint
Inkey(2)
loShell=Createobject("wscript.shell")
loShell.sendKeys("^{v}")
Endproc
Procedure command6.Click
*save contents as PNG in source folder
Thisform.Refresh
Local m.lcdest
m.lcdest=m.yrep+"ycap"+Sys(2015)+".png"
With _Screen.System.Drawing
Thisform.imgcanvas.obmp.Save(m.lcdest,.imaging.imageformat.PNG)
Messagebox("Saved as :"+m.lcdest,0+32+4096,"saved",1000)
Endwith
Endproc
Procedure Load
Create Cursor ycurs (nx i,ny i)
Insert Into ycurs Values(532,37 )
Insert Into ycurs Values(523,35 )
Insert Into ycurs Values(513,40 )
Insert Into ycurs Values(503,33 )
Insert Into ycurs Values(493,37 )
Insert Into ycurs Values(480,36 )
Insert Into ycurs Values(469,41 )
Insert Into ycurs Values(460,41 )
Insert Into ycurs Values(453,46 )
Insert Into ycurs Values(445,41 )
Insert Into ycurs Values(431,39 )
Insert Into ycurs Values(419,41 )
Insert Into ycurs Values(412,42 )
Insert Into ycurs Values(402,43 )
Insert Into ycurs Values(393,46 )
Insert Into ycurs Values(381,46 )
Insert Into ycurs Values(366,51 )
Insert Into ycurs Values(358,50 )
Insert Into ycurs Values(347,56 )
Insert Into ycurs Values(335,59 )
Insert Into ycurs Values(328,64 )
Insert Into ycurs Values(322,71 )
Insert Into ycurs Values(313,69 )
Insert Into ycurs Values(305,74 )
Insert Into ycurs Values(296,79 )
Insert Into ycurs Values(290,84 )
Insert Into ycurs Values(280,90 )
Insert Into ycurs Values(273,91 )
Insert Into ycurs Values(280,98 )
Insert Into ycurs Values(284,107 )
Insert Into ycurs Values(282,117 )
Insert Into ycurs Values(282,125)
Insert Into ycurs Values(283,134 )
Insert Into ycurs Values(284,143 )
Insert Into ycurs Values(288,155 )
Insert Into ycurs Values(294,164 )
Insert Into ycurs Values(295,174 )
Insert Into ycurs Values(286,180 )
Insert Into ycurs Values(277,177 )
Insert Into ycurs Values(267,177 )
Insert Into ycurs Values(258,176 )
Insert Into ycurs Values(248,179 )
Insert Into ycurs Values(244,185 )
Insert Into ycurs Values(235,188 )
Insert Into ycurs Values(228,190 )
Insert Into ycurs Values(226,199 )
Insert Into ycurs Values(227,205 )
Insert Into ycurs Values(220,213 )
Insert Into ycurs Values(206,220 )
Insert Into ycurs Values(197,220 )
Insert Into ycurs Values(190,233 )
Insert Into ycurs Values(181,239 )
Insert Into ycurs Values(171,239 )
Insert Into ycurs Values(159,238 )
Insert Into ycurs Values(153,244)
Insert Into ycurs Values(145,241 )
Insert Into ycurs Values(133,244 )
Insert Into ycurs Values(128,250 )
Insert Into ycurs Values(114,256 )
Insert Into ycurs Values(106,262 )
Insert Into ycurs Values( 99,268 )
Insert Into ycurs Values( 97,278 )
Insert Into ycurs Values(97,289 )
Insert Into ycurs Values(95,301 )
Insert Into ycurs Values(100,309 )
Insert Into ycurs Values(110,320 )
Insert Into ycurs Values(122,331 )
Insert Into ycurs Values(130,339 )
Insert Into ycurs Values(138,346 )
Insert Into ycurs Values(150,351 )
Insert Into ycurs Values(163,360 )
Insert Into ycurs Values(172,371 )
Insert Into ycurs Values(177,376)
Insert Into ycurs Values(188,382 )
Insert Into ycurs Values(199,393 )
Insert Into ycurs Values(210,398 )
Insert Into ycurs Values(222,406 )
Insert Into ycurs Values(230,415 )
Insert Into ycurs Values(234,417 )
Insert Into ycurs Values(245,426 )
Insert Into ycurs Values(253,433 )
Insert Into ycurs Values(259,442 )
Insert Into ycurs Values(272,448 )
Insert Into ycurs Values(280,454 )
Insert Into ycurs Values(288,463 )
Insert Into ycurs Values(295,466 )
Insert Into ycurs Values(306,473 )
Insert Into ycurs Values(313,479 )
Insert Into ycurs Values(317,481 )
Insert Into ycurs Values(325,485 )
Insert Into ycurs Values(331,489)
Insert Into ycurs Values(337,494 )
Insert Into ycurs Values(342,499 )
Insert Into ycurs Values(348,508 )
Insert Into ycurs Values(352,517 )
Insert Into ycurs Values(362,521)
Insert Into ycurs Values(365,528 )
Insert Into ycurs Values(374,529 )
Insert Into ycurs Values(380,532 )
Insert Into ycurs Values(389,536 )
Insert Into ycurs Values(398,536 )
Insert Into ycurs Values(402,548 )
Insert Into ycurs Values(403,551 )
Insert Into ycurs Values(403,557 )
Insert Into ycurs Values(405,563 )
Insert Into ycurs Values(417,565 )
Insert Into ycurs Values(426,563)
Insert Into ycurs Values(436,562 )
Insert Into ycurs Values(444,558)
Insert Into ycurs Values(459,555 )
Insert Into ycurs Values(465,553 )
Insert Into ycurs Values(473,550 )
Insert Into ycurs Values(485,543 )
Insert Into ycurs Values(497,531 )
Insert Into ycurs Values(507,523 )
Insert Into ycurs Values(515,514 )
Insert Into ycurs Values(530,504)
Insert Into ycurs Values(543,492 )
Insert Into ycurs Values(556,484 )
Insert Into ycurs Values(573,476 )
Insert Into ycurs Values(583,467)
Insert Into ycurs Values(596,460 )
Insert Into ycurs Values(607,448)
Insert Into ycurs Values(620,437 )
Insert Into ycurs Values(636,426)
Insert Into ycurs Values(633,412 )
Insert Into ycurs Values(623,403)
Insert Into ycurs Values(613,396 )
Insert Into ycurs Values(602,396)
Insert Into ycurs Values(592,397 )
Insert Into ycurs Values(586,387 )
Insert Into ycurs Values(581,373 )
Insert Into ycurs Values(574,359 )
Insert Into ycurs Values(565,353 )
Insert Into ycurs Values(571,344 )
Insert Into ycurs Values(578,336 )
Insert Into ycurs Values(573,327 )
Insert Into ycurs Values(573,318 )
Insert Into ycurs Values(576,310)
Insert Into ycurs Values(578,304 )
Insert Into ycurs Values(574,290 )
Insert Into ycurs Values(575,274 )
Insert Into ycurs Values(575,262 )
Insert Into ycurs Values(566,248 )
Insert Into ycurs Values(559,232 )
Insert Into ycurs Values(564,218 )
Insert Into ycurs Values(557,203 )
Insert Into ycurs Values(551,184 )
Insert Into ycurs Values(543,175)
Insert Into ycurs Values(534,166 )
Insert Into ycurs Values(529,155 )
Insert Into ycurs Values(521,148 )
Insert Into ycurs Values(515,142 )
Insert Into ycurs Values(511,137 )
Insert Into ycurs Values(510,125 )
Insert Into ycurs Values(514,117 )
Insert Into ycurs Values(521,110 )
Insert Into ycurs Values(526,105 )
Insert Into ycurs Values(526,99)
Insert Into ycurs Values(529,88 )
Insert Into ycurs Values(529,82 )
Insert Into ycurs Values(527,71 )
Insert Into ycurs Values(523,68 )
Insert Into ycurs Values(523,62 )
Insert Into ycurs Values(526,58 )
Insert Into ycurs Values(528,49 )
Insert Into ycurs Values(533,43 )
Sele ycurs
Repl All nx With nx+100
Repl All ny With ny+100
Endproc
Enddefine
*
*End code
code with a background map picture (choose large as the imgcanvas dimensions or a small texture image as gif...). to fill the map area correctly.
Click on code to select [then copy] -click outside to deselect
*5* a web sample (open source)-works with JQuery (loaded in code from web site).
*A sample from http://jsfiddle.net/neveldo/TUYHN/
*ie nowadays must be run with administrator privelege (run vfp9.exe as administrator).
Clea All
Set Safe Off
Declare Integer BringWindowToTop In user32 Integer
Local m.myvar
TEXT to m.myvar noshow
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<meta charset="UTF-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.3.js"></script>
<link rel="stylesheet" type="text/css" href="http:/css/result-light.css">
<script type="text/javascript" src="https://cdn.rawgit.com/DmitryBaranovskiy/raphael/v2.1.4/raphael-min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/neveldo/jQuery-Mapael/1.1.0/js/jquery.mapael.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/neveldo/jQuery-Mapael/1.1.0/js/maps/france_departments.js"></script>
<style type="text/css">
.mapTooltip {
position : fixed;
background-color : #fff;
moz-opacity:0.70;
opacity: 0.70;
filter:alpha(opacity=70);
border-radius:10px;
padding : 10px;
z-index: 1000;
max-width: 200px;
display:none;
color:#343434;
}
.container {
max-width: 800px;
margin:auto;
}
body {
font-family:Helvetica,Arial,sans-serif;
}
h1 {
color:#5d5d5d;
font-size:30px;
}
</style>
<title> by neveldo</title>
<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
$(function(){
$(".mapcontainer").mapael({
map : {
name : "france_departments",
defaultArea: {
attrs : {
stroke : "#fff",
"stroke-width" : 1
},
attrsHover : {
"stroke-width" : 2
}
}
},
legend : {
area : {
title :"Population of France by department",
slices : [
{
max :300000,
attrs : {
fill : "#97e766"
},
label :"Less than de 300 000 inhabitants"
},
{
min :300000,
max :500000,
attrs : {
fill : "#7fd34d"
},
label :"Between 100 000 and 500 000 inhabitants"
},
{
min :500000,
max :1000000,
attrs : {
fill : "#5faa32"
},
label :"Between 500 000 and 1 000 000 inhabitants"
},
{
min :1000000,
attrs : {
fill : "#3f7d1a"
},
label :"More than 1 million inhabitants"
}
]
}
},
areas: {
"department-59": {
value: "2617939",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Nord (59)</span><br />Population : 2617939"}
},
"department-75": {
value: "2268265",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Paris (75)</span><br />Population : 2268265"}
},
"department-13": {
value: "2000550",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Bouches-du-Rhône (13)</span><br />Population : 2000550"}
},
"department-69": {
value: "1756069",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Rhône (69)</span><br />Population : 1756069"}
},
"department-92": {
value: "1590749",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Hauts-de-Seine (92)</span><br />Population : 1590749"}
},
"department-93": {
value: "1534895",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Seine-Saint-Denis (93)</span><br />Population : 1534895"}
},
"department-62": {
value: "1489209",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Pas-de-Calais (62)</span><br />Population : 1489209"}
},
"department-33": {
value: "1479277",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Gironde (33)</span><br />Population : 1479277"}
},
"department-78": {
value: "1435448",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Yvelines (78)</span><br />Population : 1435448"}
},
"department-77": {
value: "1347008",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Seine-et-Marne (77)</span><br />Population : 1347008"}
},
"department-94": {
value: "1340868",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Val-de-Marne (94)</span><br />Population : 1340868"}
},
"department-44": {
value: "1317685",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Loire-Atlantique (44)</span><br />Population : 1317685"}
},
"department-76": {
value: "1275952",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Seine-Maritime (76)</span><br />Population : 1275952"}
},
"department-31": {
value: "1268370",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Garonne (31)</span><br />Population : 1268370"}
},
"department-38": {
value: "1233759",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Isère (38)</span><br />Population : 1233759"}
},
"department-91": {
value: "1233645",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Essonne (91)</span><br />Population : 1233645"}
},
"department-95": {
value: "1187836",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Val-d'Oise (95)</span><br />Population : 1187836"}
},
"department-67": {
value: "1115226",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Bas-Rhin (67)</span><br />Population : 1115226"}
},
"department-06": {
value: "1094579",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Alpes-Maritimes (06)</span><br />Population : 1094579"}
},
"department-57": {
value: "1066667",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Moselle (57)</span><br />Population : 1066667"}
},
"department-34": {
value: "1062617",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Hérault (34)</span><br />Population : 1062617"}
},
"department-83": {
value: "1026222",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Var (83)</span><br />Population : 1026222"}
},
"department-35": {
value: "1015470",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Ille-et-Vilaine (35)</span><br />Population : 1015470"}
},
"department-29": {
value: "929286",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Finistère (29)</span><br />Population : 929286"}
},
"department-974": {
value: "829903",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">La Réunion (974)</span><br />Population : 829903"}
},
"department-60": {
value: "823668",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Oise (60)</span><br />Population : 823668"}
},
"department-49": {
value: "808298",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Maine-et-Loire (49)</span><br />Population : 808298"}
},
"department-42": {
value: "766729",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Loire (42)</span><br />Population : 766729"}
},
"department-68": {
value: "765634",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haut-Rhin (68)</span><br />Population : 765634"}
},
"department-74": {
value: "760979",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Savoie (74)</span><br />Population : 760979"}
},
"department-54": {
value: "746502",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Meurthe-et-Moselle (54)</span><br />Population : 746502"}
},
"department-56": {
value: "744663",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Morbihan (56)</span><br />Population : 744663"}
},
"department-30": {
value: "726285",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Gard (30)</span><br />Population : 726285"}
},
"department-14": {
value: "699561",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Calvados (14)</span><br />Population : 699561"}
},
"department-45": {
value: "674913",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Loiret (45)</span><br />Population : 674913"}
},
"department-64": {
value: "674908",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Pyrénées-Atlantiques (64)</span><br />Population : 674908"}
},
"department-85": {
value: "654096",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Vendée (85)</span><br />Population : 654096"}
},
"department-63": {
value: "649643",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Puy-de-Dôme (63)</span><br />Population : 649643"}
},
"department-17": {
value: "640803",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Charente-Maritime (17)</span><br />Population : 640803"}
},
"department-01": {
value: "614331",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Ain (01)</span><br />Population : 614331"}
},
"department-22": {
value: "612383",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Côtes-d'Armor (22)</span><br />Population : 612383"}
},
"department-37": {
value: "605819",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Indre-et-Loire (37)</span><br />Population : 605819"}
},
"department-27": {
value: "603194",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Eure (27)</span><br />Population : 603194"}
},
"department-80": {
value: "583388",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Somme (80)</span><br />Population : 583388"}
},
"department-51": {
value: "579533",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Marne (51)</span><br />Population : 579533"}
},
"department-72": {
value: "579497",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Sarthe (72)</span><br />Population : 579497"}
},
"department-71": {
value: "574874",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Saône-et-Loire (71)</span><br />Population : 574874"}
},
"department-84": {
value: "555240",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Vaucluse (84)</span><br />Population : 555240"}
},
"department-02": {
value: "555094",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Aisne (02)</span><br />Population : 555094"}
},
"department-25": {
value: "542509",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Doubs (25)</span><br />Population : 542509"}
},
"department-21": {
value: "538505",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Côte-d'Or (21)</span><br />Population : 538505"}
},
"department-50": {
value: "517121",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Manche (50)</span><br />Population : 517121"}
},
"department-26": {
value: "499313",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Drôme (26)</span><br />Population : 499313"}
},
"department-66": {
value: "457238",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Pyrénées-Orientales (66)</span><br />Population : 457238"}
},
"department-28": {
value: "440291",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Eure-et-Loir (28)</span><br />Population : 440291"}
},
"department-86": {
value: "438566",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Vienne (86)</span><br />Population : 438566"}
},
"department-73": {
value: "428751",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Savoie (73)</span><br />Population : 428751"}
},
"department-24": {
value: "426607",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Dordogne (24)</span><br />Population : 426607"}
},
"department-971": {
value: "409905",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Guadeloupe (971)</span><br />Population : 409905"}
},
"department-972": {
value: "400535",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Martinique (972)</span><br />Population : 400535"}
},
"department-40": {
value: "397766",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Landes (40)</span><br />Population : 397766"}
},
"department-88": {
value: "392846",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Vosges (88)</span><br />Population : 392846"}
},
"department-81": {
value: "387099",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Tarn (81)</span><br />Population : 387099"}
},
"department-87": {
value: "384781",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Vienne (87)</span><br />Population : 384781"}
},
"department-79": {
value: "380569",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Deux-Sèvres (79)</span><br />Population : 380569"}
},
"department-11": {
value: "365854",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Aude (11)</span><br />Population : 365854"}
},
"department-16": {
value: "364429",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Charente (16)</span><br />Population : 364429"}
},
"department-89": {
value: "353366",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Yonne (89)</span><br />Population : 353366"}
},
"department-03": {
value: "353124",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Allier (03)</span><br />Population : 353124"}
},
"department-47": {
value: "342500",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Lot-et-Garonne (47)</span><br />Population : 342500"}
},
"department-41": {
value: "340729",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Loir-et-Cher (41)</span><br />Population : 340729"}
},
"department-07": {
value: "324885",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Ardèche (07)</span><br />Population : 324885"}
},
"department-18": {
value: "319600",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Cher (18)</span><br />Population : 319600"}
},
"department-53": {
value: "317006",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Mayenne (53)</span><br />Population : 317006"}
},
"department-10": {
value: "311720",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Aube (10)</span><br />Population : 311720"}
},
"department-61": {
value: "301421",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Orne (61)</span><br />Population : 301421"}
},
"department-08": {
value: "291678",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Ardennes (08)</span><br />Population : 291678"}
},
"department-12": {
value: "288364",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Aveyron (12)</span><br />Population : 288364"}
},
"department-39": {
value: "271973",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Jura (39)</span><br />Population : 271973"}
},
"department-19": {
value: "252235",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Corrèze (19)</span><br />Population : 252235"}
},
"department-82": {
value: "248227",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Tarn-et-Garonne (82)</span><br />Population : 248227"}
},
"department-70": {
value: "247311",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Saône (70)</span><br />Population : 247311"}
},
"department-36": {
value: "238261",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Indre (36)</span><br />Population : 238261"}
},
"department-65": {
value: "237945",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Hautes-Pyrénées (65)</span><br />Population : 237945"}
},
"department-43": {
value: "231877",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Loire (43)</span><br />Population : 231877"}
},
"department-973": {
value: "231167",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Guyane (973)</span><br />Population : 231167"}
},
"department-58": {
value: "226997",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Nièvre (58)</span><br />Population : 226997"}
},
"department-55": {
value: "200509",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Meuse (55)</span><br />Population : 200509"}
},
"department-32": {
value: "195489",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Gers (32)</span><br />Population : 195489"}
},
"department-52": {
value: "191004",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Marne (52)</span><br />Population : 191004"}
},
"department-46": {
value: "181232",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Lot (46)</span><br />Population : 181232"}
},
"department-2B": {
value: "168869",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Haute-Corse (2B)</span><br />Population : 168869"}
},
"department-04": {
value: "165155",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Alpes-de-Haute-Provence (04)</span><br />Population : 165155"}
},
"department-09": {
value: "157582",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Ariège (09)</span><br />Population : 157582"}
},
"department-15": {
value: "154135",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Cantal (15)</span><br />Population : 154135"}
},
"department-90": {
value: "146475",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Territoire de Belfort (90)</span><br />Population : 146475"}
},
"department-2A": {
value: "145998",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Corse-du-Sud (2A)</span><br />Population : 145998"}
},
"department-05": {
value: "142312",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Hautes-Alpes (05)</span><br />Population : 142312"}
},
"department-23": {
value: "127919",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Creuse (23)</span><br />Population : 127919"}
},
"department-48": {
value: "81281",
href : "#",
tooltip: {content : "<span style=\"font-weight:bold;\">Lozère (48)</span><br />Population : 81281"}
}
}
});
});
});//]]>
</script>
</head>
<body>
<input type="Button" value="X" style="float:right;background-color:lime; color:red;cursor:pointer;" onclick="window.open('','_self');window.close();">
<div class="container">
<h1>Map with a legend for areas</h1>
<div class="mapcontainer">
<div class="map">
<span>Alternative content for the map</span>
</div>
<div class="areaLegend">
<span>Alternative content for the legend</span>
</div>
</div>
</div>
</body>
</html>
ENDTEXT
Local m.lcdest
m.lcdest=Addbs(Sys(2023))+"ymap_fr.html"
Strtofile(m.myvar,m.lcdest)
Publi apie
apie=Newobject('internetexplorer.application')
With apie
.Navigate(m.lcdest)
.menubar=0
.Toolbar=0
.StatusBar=0
.fullscreen=1
BringWindowToTop(.HWnd)
.Visible=.T.
Endwith
Click on code to select [then copy] -click outside to deselect
*6* created on 11 of january 2017
*can custom your map+the points circuit(x,y captured manually-read the commentedimage mousedown)
*map is grabbed directly from the web (internet connected).
Publi yform
yform=Newobject("ycircuit")
yform.Show
Read Events
Retu
*
DEFINE CLASS ycircuit AS form
Height = 573
Width = 863
ShowWindow = 2
DoCreate = .T.
ShowTips = .T.
AutoCenter = .T.
Caption = "Drawing circuits on a map"
WindowState = 2
Name = "Form1"
ADD OBJECT image1 AS image WITH ;
Anchor = 15, ;
Height = 576, ;
Left = 0, ;
Top = 0, ;
Width = 864, ;
Name = "Image1"
PROCEDURE ydraw
local m.myvar
text to m.myvar noshow
589 38
601 57
553 76
482 73
477 61
447 80
406 89
385 103
406 119
480 108
474 135
397 131
404 181
486 179
563 181
586 241
359 268
402 406
696 572
832 447
721 252
744 175
748 135
760 113
806 111
794 88
818 84
818 68
816 47
789 55
762 38
794 35
750 69
710 53
661 61
707 80
704 98
653 103
645 83
616 70
612 53
589 42
592 39
597 52
587 54
573 55
563 55
548 56
529 56
520 57
504 62
490 64
477 69
464 75
453 78
441 86
429 91
412 91
403 89
400 93
398 110
392 123
389 132
390 144
395 165
397 174
397 180
410 184
423 184
433 184
443 184
454 184
467 183
487 182
500 182
496 189
477 204
467 210
446 222
434 229
420 236
400 244
389 252
374 256
354 264
336 267
330 273
314 282
302 292
271 304
256 309
248 326
244 329
237 346
231 360
229 364
219 361
209 361
197 364
182 367
160 374
156 377
143 382
128 386
119 390
93 398
96 396
136 403
149 415
180 437
200 452
236 472
251 478
272 478
291 476
307 465
322 454
334 445
346 435
357 427
369 422
395 410
407 406
412 408
431 420
445 430
462 443
475 454
501 475
513 484
549 506
563 518
594 534
610 544
633 554
666 568
691 574
691 574
708 570
725 557
731 548
742 539
770 517
783 509
810 486
824 468
830 460
842 447
840 443
820 442
795 441
765 438
737 438
708 433
683 429
683 429
680 427
645 405
633 401
616 380
600 345
593 312
593 300
593 286
594 270
597 261
599 247
601 241
621 242
643 243
650 244
668 244
686 245
727 245
734 249
733 238
739 215
742 194
744 165
744 164
717 164
697 165
660 170
627 172
608 176
589 178
588 178
601 155
605 146
605 146
615 145
643 145
678 140
716 132
737 132
744 123
760 114
781 114
795 114
819 114
821 113
821 96
816 88
814 79
813 75
815 57
817 50
821 37
800 43
796 44
764 38
760 36
757 36
743 39
731 47
720 53
709 54
677 61
676 61
664 52
647 48
640 48
627 49
604 59
594 43
endtext
try
zap in slect("ycurs")
catch
endtry
local m.x,m.y
for i=1 to memlines(m.myvar)
m.x=int(val(getwordnum(allt(mline(m.myvar,i)),1)))
m.y=int(val(getwordnum(allt(mline(m.myvar,i)),2)))
insert into ycurs values(m.x,m.y)
endfor
*brow
locate
with thisform
.cls
.forecolor=255
sele ycurs
locate
x0=x
y0=y
scan
m.shp="shape"+trans(recno())
.addobject(m.shp,"shape")
with eval("."+m.shp)
.width=20
.height=20
.left=x-.width/2
.top=y-.height/2
.backcolor=rgb(255*rand(),255*rand(),255*rand())
.bordercolor=0
.borderstyle=1
.borderwidth=3
.drawmode=9
.curvature=99
.visible=.t.
endwith
bindevent(eval("."+m.shp),"mouseMove",thisform,"my")
endscan
inke(2) &&sleep gives bad result
.setall("drawmode",15,"shape")
inke(2)
.setall("backcolor",rgb(0,255,255),"shape")
.setall("bordercolor",255,"shape")
.setall("drawmode",9,"shape")
endwith
messagebox("Mousemove on any shape to read the coordinates",0+32+4096,"",1200)
ENDPROC
PROCEDURE my
LPARAMETERS nButton, nShift, nXCoord, nYCoord
*--- aevent create an array laEvents
Aevents( myArray, 0)
*--- reference the calling object
loObject = myArray[1]
loObject.mousepointer=15
sele ycurs
go int(val(substr(loObject.name,6)))
loObject.tooltiptext=trans(x)+","+trans(y)
ENDPROC
PROCEDURE Activate
inke(2)
with thisform
.drawWidth=4
.forecolor=255
.backcolor=rgb(0,0,255)
.fillstyle=0
sele ycurs
x0=x
y0=y
scan
if recno()=1
.line(x0,y0,x,y)
else
.line(x,y)
endi
.circle(12,x,y)
endscan
endwith
inke(3)
with thisform
.cls
.forecolor=255
sele ycurs
x0=x
y0=y
scan
m.shp="shape"+trans(recno())
.addobject(m.shp,"shape")
with eval("."+m.shp)
.width=30
.height=30
.left=x-.width/2
.top=y-.height/2
.backcolor=rgb(0,255,0)
.bordercolor=0
.borderstyle=1
.borderwidth=3
.drawmode=9
.curvature=99
.visible=.t.
endwith
endscan
inke(2)
sele ycurs
locate
x0=x
y0=y
scan
if recno()=1
.line(x0,y0,x,y)
else
.line(x,y)
endi
endscan
inke(2) &&sleep gives bad result
.setall("drawmode",15,"shape")
inke(2)
.setall("backcolor",rgb(255,255,0),"shape")
.setall("drawmode",9,"shape")
inke(2)
for i=1 to .controlcount
try
thisform.removeObject(eval(".shape"+trans(i)+".name"))
catch
endtry
endfor
*inke(2)
.ydraw
endwith
ENDPROC
PROCEDURE Load
close data all
*the captured path is here (x,y)
create cursor ycurs (x i ,y i)
local m.myvar
text to m.myvar pretext 7 noshow
589 38
601 57
553 76
482 73
477 61
447 80
406 89
385 103
406 119
480 108
474 135
397 131
404 181
486 179
563 181
586 241
359 268
402 406
696 572
832 447
721 252
744 175
748 135
760 113
806 111
794 88
818 84
818 68
816 47
789 55
762 38
794 35
750 69
710 53
661 61
707 80
704 98
653 103
645 83
616 70
612 53
589 42
endtext
local m.x,m.y
for i=1 to memlines(m.myvar)
m.x=int(val(getwordnum(allt(mline(m.myvar,i)),1)))
m.y=int(val(getwordnum(allt(mline(m.myvar,i)),2)))
insert into ycurs values(m.x,m.y)
endfor
*brow
locate
ENDPROC
PROCEDURE Destroy
clea events
ENDPROC
PROCEDURE image1.MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord
*!* *can captures points x,y (form.load) with this method.uncomment,comment form.activate,and run ...click the way to capture point by point
*!* *close the form, the ycurs cursor saty in memor...brow...copy to ycircuit.txt sdf.....open txt selecta all and copy...
*!*insert into ycurs values( nxcoord,nycoord) &&capture one point (x,y)
ENDPROC
PROCEDURE image1.Init
*internet must be connected....capture the image blob as pictureval on the form
this.stretch=2
Local loRequest,lcUrl
try
m.lcUrl="http://www.mapsopensource.com/images/algeria-map.gif"
m.loRequest = Createobject('MsXml2.XmlHttp')
m.loRequest.Open("GET",lcUrl,.F.)
m.loRequest.Send()
This.PictureVal=m.loRequest.ResponseBody
m.loRequest=Null
catch
messagebox("An error was occured!",16+4096,"error")
endtry
ENDPROC
ENDDEFINE
*
*-- EndDefine: ycircuit
Click on code to select [then copy] -click outside to deselect
*7*created on Monday 16 of january 2017-updated on 20 of january 2017
*!*-this code draws any star form 3 branches to 200.
*!*it uses also the floodfill API to paint each star branch with a random
*!*color(can use the palette colors to mousedown any color on the star).
*!*if there is no radius painted , it paint all the star shape.
*!*can capture the star painted with snippingtool utility (win32 bits app).
*!* can make the second radius r0 variable to have other kinds of stars(0.6*r,0.7*r,0.8*r,0.9*r...)
*this is added with spinner2 control on form.
*!*see also same objects in gdiplusX drawings (previous posts)
_Screen.WindowState=1
Publi yform
yform=Newobject("ystars")
yform.Show
Read Events
Retu
*
Define Class ystars As Form
BorderStyle = 0
Height = 590
Width = 794
ShowWindow = 2
ShowTips = .T.
AutoCenter = .T.
Caption = "Draw stars from 3 to 200 branches. and fill with any color."
MaxButton = .F.
Themes = .T.
ycolor = 255
yhwnd = .F.
Name = "Form1"
Add Object shape1 As Shape With ;
Top = 24, ;
Left = 24, ;
Height = 480, ;
Width = 744, ;
Anchor = 15, ;
BackColor = Rgb(0,255,255), ;
Name = "Shape1"
Add Object spinner1 As Spinner With ;
Anchor = 768, ;
Height = 24, ;
KeyboardHighValue = 200, ;
KeyboardLowValue = 3, ;
Left = 541, ;
SpinnerHighValue = 200.00, ;
SpinnerLowValue = 3.00, ;
ToolTipText = "Shape branches", ;
Top = 534, ;
Width = 72, ;
Value = 5, ;
Name = "Spinner1"
Add Object timer1 As Timer With ;
Top = 540, ;
Left = 504, ;
Height = 23, ;
Width = 23, ;
Enabled = .F., ;
Interval = 1000, ;
Name = "Timer1"
Add Object check1 As Checkbox With ;
Top = 540, ;
Left = 432, ;
Height = 17, ;
Width = 60, ;
Anchor = 768, ;
Alignment = 0, ;
Caption = "Radius", ;
Value = 1, ;
Name = "Check1"
Add Object container1 As ycnt With ;
Anchor = 768, ;
Top = 540, ;
Left = 12, ;
Width = 396, ;
Height = 32, ;
BackStyle = 0, ;
BorderWidth = 1, ;
ToolTipText = "Pick a color and paint the star", ;
Name = "Container1"
Add Object command1 As CommandButton With ;
Top = 540, ;
Left = 648, ;
Height = 25, ;
Width = 48, ;
FontBold = .T., ;
Anchor = 768, ;
Caption = "Clear", ;
BackColor = Rgb(128,255,0), ;
Name = "Command1"
Add Object label1 As Label With ;
AutoSize = .T., ;
FontBold = .T., ;
FontSize = 32, ;
Anchor = 768, ;
BackStyle = 0, ;
Caption = "?", ;
Height = 54, ;
Left = 744, ;
MousePointer = 15, ;
Top = 516, ;
Width = 28, ;
ForeColor = Rgb(255,0,0), ;
Name = "Label1"
Add Object command2 As CommandButton With ;
Top = 540,;
Left = 700,;
Height = 25,;
Width = 44,;
FontSize = 11,;
Caption = "Cap",;
MousePointer = 15,;
BackColor = Rgb(255,128,64),;
Name = "Command2"
ADD Object spinner2 AS spinner with ;
Anchor = 768,;
Height = 24,;
Increment = 0.020,;
InputMask = "99.999",;
KeyboardHighValue = 1.000,;
KeyboardLowValue = 0.000,;
Left = 541,;
SpinnerHighValue = 0.980,;
SpinnerLowValue = 0.100,;
ToolTipText = "radius --- R0/R",;
Top = 559,;
Width = 72,;
Value = 0.500,;
Name = "Spinner2"
PROCEDURE Spinner2.InteractiveChange
this.refresh
if between(this.value,this.spinnerLowValue,this.SpinnerHighValue)
inke(0.2,'H')
thisform.ydraw(thisform.spinner1.value)
endi
ENDPROC
Procedure command2.Click
Try
Run/N c:\windows\sysnative\snippingtool && windows 32bits and 64 bits
Catch
Messagebox("snippingtool.exe dont exists!",16+4096,"error")
Endtry
Endproc
Procedure ydraw
Lparameters N
Thisform.Cls
teta=2*Pi()/N
Local r,r0,xc,yc,x0,y0,x,Y
r=0.30*(Thisform.shape1.Width-20)
r0=r*thisform.spinner2.value
Thisform.ForeColor=255
xc=Thisform.shape1.Left+Thisform.shape1.Width/2
yc=Thisform.shape1.Top+Thisform.shape1.Height/2
For i=0 To N
x0=xc+r0*Cos(i*teta-teta/2)
y0=yc+r0*Sin(i*teta-teta/2)
x=xc+r*Cos(i*teta)
Y=yc+r*Sin(i*teta)
If i=0
xb=x
yb=Y
Endi
Thisform.DrawWidth=3
Thisform.ForeColor=255
Thisform.Line(xb,yb,x0,y0)
Thisform.Line(x0,y0,x,Y)
*rayons
If Thisform.check1.Value=1
Thisform.ForeColor=Rgb(0,0,0)
Thisform.DrawWidth=1
Thisform.Line(xc,yc,x,Y)
Endi
xb=x
yb=Y
Endfor
*fill random color
For i=1 To N+1
x0=xc+0.5*r0*Cos(i*teta-teta/2)
y0=yc+0.5*r0*Sin(i*teta-teta/2)
Thisform.ycolor=Rgb(255*Rand(),255*Rand(),255*Rand())
Thisform.shape1.MouseDown(1,"",x0,y0)
Inke(0.1)
Endfor
*thisform.spinner1.setfocus
Endproc
Procedure my
Lparameters nButton, nShift, nXCoord, nYCoord
*--- aevent create an array laEvents
Aevents( myArray, 0)
*--- reference the calling object
loObject = myArray[1]
Thisform.ycolor= loObject.BackColor
Endproc
Procedure Destroy
Clea Events
Endproc
Procedure Init
#Define GW_CHILD 5
If Thisform.ShowWindow= 2
Thisform.yhwnd = GetWindow(Thisform.HWnd, GW_CHILD)
Else
Thisform.yhwnd= Thisform.HWnd && _vfp.hwnd
Endif
Thisform.timer1.Enabled=.T.
Endproc
Procedure Load
Declare Integer SelectObject In WIN32API Integer hdc, Integer hgdiobj
Declare Integer GetPixel In win32API Integer hdc, Integer nXPos, Integer nYPos
Declare SHORT GetCursorPos In win32api String @ lpPoint
Declare Integer GetWindowDC In Win32API Integer HWnd
Declare Integer CreateSolidBrush In WIN32API Long crColor
Declare Long DeleteObject In WIN32API Long hObject
Declare Integer GetDC In user32 Integer HWnd
Declare Long ExtFloodFill In gdi32 Long hdc, Long x, Long Y, Long crColor, Long wFillType
Declare Long SetPixel In gdi32 Long hdc, Long x, Long Y, Long crColor
Declare Integer GetWindow In user32 Integer HWnd,Integer wFlag
Endproc
Procedure shape1.MouseDown
Lparameters nButton, nShift, nXCoord, nYCoord
#Define FLOODFILLBORDER 0 && Fill until crColor& color encountered.
#Define FLOODFILLSURFACE 1 && Fill surface until crColor& color not encountered.
Local lpPoint, lnPosX, lnPosY
lpPoint = Space(8)
If GetCursorPos(@lpPoint) = 0
Return
Endif
lnPosX = Asc(Substr(lpPoint,1))*256^0+;
ASC(Substr(lpPoint,2))*256^1+;
ASC(Substr(lpPoint,3))*256^2+;
ASC(Substr(lpPoint,4))*256^3
lnPosY = Asc(Substr(lpPoint,5))*256^0+;
ASC(Substr(lpPoint,6))*256^1+;
ASC(Substr(lpPoint,7))*256^2+;
ASC(Substr(lpPoint,8))*256^3
Local lnNewColor, lnHDC, lhBrush,xxx,yyy,zzz
lnHDC=GetWindowDC(Thisform.yhwnd)
* Create a solid brush
lhBrush = CreateSolidBrush(Thisform.ycolor)
* Select the brush into the PictureBox' device context
xxx=SelectObject(lnHDC, lhBrush)
* Fill the object
yyy=ExtFloodFill(lnHDC, nXCoord, nYCoord,GetPixel(lnHDC, nXCoord, nYCoord) , FLOODFILLSURFACE)
* Release the brush
zzz=DeleteObject(lhBrush)
Thisform.MousePointer=0
Thisform.ycolor=Rgb(255*Rand(),255*Rand(),255*Rand()) &&fill the property with random color ready to fillflood any area of star
Endproc
Procedure spinner1.InteractiveChange
If Between(This.Value,This.SpinnerLowValue,This.SpinnerHighValue)
Inke(0.2,'H')
Thisform.ydraw(This.Value)
Endi
Endproc
Procedure timer1.Timer
Thisform.spinner1.InteractiveChange()
This.Enabled=.F.
Endproc
Procedure check1.InteractiveChange
*thisform.ydraw(this.parent.spinner1.value)
Endproc
Procedure container1.Init
With This
.SetAll("mousepointer",15,"shape")
For i=1 To .ControlCount
Bindevent(.Controls(i),"mousedown",Thisform,"my")
Endfor
Endwith
Thisform.ycolor=Thisform.BackColor
Endproc
Procedure command1.Click
Local m.xcolor
m.xcolor=Getcolor()
If ! m.xcolor=-1
This.BackColor=m.xcolor
Thisform.ycolor=m.xcolor
Endi
Endproc
Procedure command1.Click
Thisform.Cls
Endproc
Procedure label1.Click
Local m.myvar
TEXT to m.myvar pretext 7 noshow
-this code draw any star form 3 branches to 200.
it uses also the floodfill API to paint each star branch with a random
color(can use the palette colors to mousedown any color on the star).
if there is no radius painted , it paint all the star shape.
can capture the star painted with snippingtool utility.
can make the second radius r0 varibale to have other kinds of stars(0.6*r,0.7*r,0.8*r,0.9*r...)
*That is updated on code with spinner2 (0-1 values with 0.02 as increment).
ENDTEXT
Messagebox(m.myvar,0+32+4096,"Summary help")
Endproc
Enddefine
*
*-- EndDefine: ystars
*
Define Class ycnt As Container
Anchor = 768
Top = 540
Left = 12
Width = 396
Height = 32
BackStyle = 0
BorderWidth = 1
ToolTipText = "Pick a color and paint the star"
Name = "Container1"
Add Object shape2 As Shape With ;
Top = 4, ;
Left = 46, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(255,0,0), ;
Name = "Shape2"
Add Object shape3 As Shape With ;
Top = 4, ;
Left = 87, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(0,0,255), ;
Name = "Shape3"
Add Object shape4 As Shape With ;
Top = 4, ;
Left = 129, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(0,255,255), ;
Name = "Shape4"
Add Object shape5 As Shape With ;
Top = 4, ;
Left = 172, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(128,0,255), ;
Name = "Shape5"
Add Object shape6 As Shape With ;
Top = 4, ;
Left = 214, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(128,0,64), ;
Name = "Shape6"
Add Object shape7 As Shape With ;
Top = 4, ;
Left = 256, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(255,128,0), ;
Name = "Shape7"
Add Object shape8 As Shape With ;
Top = 4, ;
Left = 4, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(128,255,0), ;
Name = "Shape8"
Add Object shape9 As Shape With ;
Top = 4, ;
Left = 301, ;
Height = 25, ;
Width = 37, ;
BackColor = Rgb(255,255,0), ;
Name = "Shape9"
Add Object command1 As CommandButton With ;
Top = 4, ;
Left = 348, ;
Height = 25, ;
Width = 37, ;
FontBold = .T., ;
Caption = "...", ;
MousePointer = 15, ;
Name = "Command1"
Procedure Init
With This
.SetAll("mousepointer",15,"shape")
For i=1 To .ControlCount
Bindevent(.Controls(i),"mousedown",Thisform,"my")
Endfor
Endwith
Thisform.ycolor=Thisform.BackColor
Endproc
Procedure command1.Click
Local m.xcolor
m.xcolor=Getcolor()
If ! m.xcolor=-1
This.BackColor=m.xcolor
Thisform.ycolor=m.xcolor
Endi
Endproc
Enddefine
*
*-- EndDefine: ycnt
can modify with ths spinner2 control the radius r0 (0.6*r,0.7*r,0.8*r,0.98*r...) to have another lkinds of stars.
Important:All Codes above are tested on VFP9SP2 & windows 10 pro & IE11 emulation. To avoid some problems with priveleges level, run vfp9.exe as administrator.
Please come back with any bug.correct code is usefull to all readers. With the pleasure to share.