这段代码是我实际使用的一段代码,贴出来分享给大家。
procedure TBaiduMapMarker.Changed; var S: String; ASavePoint: Integer; const STempate: String = 'if(typeof(%MarkerName%) != ''undefined'')'#13#10 + // 定义了就直接设置属性 ' {'#13#10 + ' %MarkerName%.setPosition(new BMap.Point(%Pos_Lng%,%Pos_Lat%));'#13#10 + // 位置 ' %MarkerName%.setAnimation(%Animation%);'#13#10 + // 动画 ' }'#13#10 + // 'else'#13#10 + // 未定义就添加 ' {'#13#10 + ' %MarkerName%=new BMap.Marker(new BMap.Point(%Pos_Lng%,%Pos_Lat%));'#13#10 + // 位置 ' map.addOverlay(%MarkerName%);'#13#10 + // 添加图层 ' %MarkerName%.setAnimation(%Animation%);'#13#10 + // 添加完成 ' }' + 'if(%Dragable%)'#13#10 + // 需要拖拽 ' %MarkerName%.enableDragging();'#13#10 + // 启用 'else'#13#10 + // ' %MarkerName%.disableDragging();'#13#10; // 禁用 begin if not Owner.JSVars.Defined[Name] then Owner.JSVars.ExecuteScript('var ' + Name); with (Owner as TBaiduMapProvider).FMacros do begin ASavePoint := SavePoint; try Push('Pos_Lat', FloatToStr(Position.Lat)); Push('Pos_Lng', FloatToStr(Position.Lng)); Push('MarkerName', Name); if Animate then Push('Animation', 'BMAP_ANIMATION_BOUNCE') else Push('Animation', 'null'); if Dragable then Push('Dragable', 'true') else Push('Dragable', 'false'); S := Replace(STempate, '%', '%'); Owner.JSVars.ExecuteScript(S); finally Restore(ASavePoint); end; end; end;
这段代码的功能是在百度地图上,添加一个 marker 标记出指定的位置。当然这段代码你没法直接执行,因为缺少完整的定义,不过可以看出来如何在代码中通过 QMacros 将代码与脚本的模板进行分离。在调用 Replace 将宏替换为具体的值以后,将其交付浏览器执行,就可以方便的百度地图上添加标记了。下面是运行效果的一个截图: