Delphi結合簡易PHP路徑規劃

延續上一篇的文章,如何透過Delphi傳遞起訖點就能幫助做路徑規劃呢?透過Delphi的WebBrowser元件搭配遠端的PHP,傳遞參數可以做得到!

PHP的部份,我們主要是要傳遞FROM以及TO二個參數(以下不做解釋XD)
[php]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>路徑規劃</title>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<script>
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
var stepDisplay;
var markerArray = [];

function initialize() {
var rendererOptions = {
map: map,
suppressMarkers : true
}
directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
var fengyuan = new google.maps.LatLng(24.253706601916402, 120.72275021093753);
var mapOptions = {
zoom:17,
center: fengyuan
};
map = new google.maps.Map(document.getElementById(‘map-canvas’), mapOptions);
directionsDisplay.setMap(map);
stepDisplay = new google.maps.InfoWindow();
calcRoute();
}

function calcRoute() {
for (i = 0; i < markerArray.length; i++) {
markerArray[i].setMap(null);
}
markerArray = [];
var start = <?php echo ‘"’.($_GET["FROM"]).’"’; ?>;
var end = <?php echo ‘"’.($_GET["TO"]).’"’; ?>;
var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.WALKING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
showSteps(response);
}
});
}
function showSteps(directionResult) {
var myRoute = directionResult.routes[0].legs[0];
for (var i = 0; i < myRoute.steps.length; i++) {
var icon = "https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=" + i + "|FF0000|000000";
if (i == 0) {
icon = "https://chart.googleapis.com/chart?chst=d_map_xpin_icon&chld=pin|glyphish_walk|00FFFF|FF0000";
}
var marker = new google.maps.Marker({
position: myRoute.steps[i].start_point,
map: map,
icon: icon
});
attachInstructionText(marker,myRoute.steps[i].instructions);
markerArray.push(marker);
}

var marker = new google.maps.Marker({
position: myRoute.steps[i – 1].end_point,
map: map,
icon: "https://chart.googleapis.com/chart?chst=d_map_xpin_icon&chld=pin|glyphish_walk|ADDE63"
});
markerArray.push(marker);
}
function attachInstructionText(marker, text) {
google.maps.event.addListener(marker, ‘click’, function() {
stepDisplay.setContent(text);
stepDisplay.open(map, marker);
});
}
google.maps.event.addDomListener(window, ‘load’, initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
[/php]









DELPHI的部份,因為D7的URLENCODE有問題,所以我們另尋了一個解決的部份(見延伸閱讀)
[pas]
function HTTPEncode(const AStr: String): String;
const
NoConversion = [‘A’..’Z’,’a’..’z’,’*’,’@’,’.’,’_’,’-‘,’0′..’9′,’$’,’!’,””,'(‘,’)’];
var
Sp, Rp: PAnsiChar;
begin
SetLength(Result, Length(AStr) * 3);
Sp:= PAnsiChar(AStr);
Rp:= PAnsiChar(Result);
while Sp^ <> #0 do
begin
if Sp^ in NoConversion then
Rp^ := Sp^
else
if Sp^ = ‘ ‘ then
Rp^ := ‘+’
else
begin
FormatBuf(Rp^, 3, ‘%%%.2x’, 6, [Ord(Sp^)]);
Inc(Rp,2);
end;
Inc(Rp);
Inc(Sp);
end;
SetLength(Result, Rp – PAnsiChar(Result));
end;
function URLEncode(const Url: String): String;
begin
Result:= HttpEncode(UTF8Encode(Url));
end;
[/pas]
最後在畫面上佈置出二個Edit以及一個Button,以及WebBrowser。程式很簡單
[pas]
procedure TForm1.Button1Click(Sender: TObject);
var
str:WideString;
begin
str := ‘http://你的php位置?FROM=’+URLEncode(edit1.text)+’&TO=’+URLEncode(edit2.text);
self.WebBrowser1.Navigate(str);
end;
[/pas]

延伸閱讀:
Delphi URLEncode問題解決
http://alexey-m.ru/articles/urlencode-utf-8-windows1251

Google Map 路徑規劃API測試

Google Map是筆者覺得很棒的一項服務,而且Google也很佛心的提供開發的API(雖然有次數限制)。因為住豐原的關係,常常聽到週遭朋友說不知道那些可以去,所以就嘗試玩了一下路徑規劃。其實也還不複雜~例出主要的部份

JavaScript

[js]
var start = document.getElementById(‘start’).value; // 起點(可以是地址或是經緯度)
var end = document.getElementById(‘end’).value; // 終點(可以是地址或是經緯度)

var request = {
origin:start,
destination:end,
travelMode: google.maps.TravelMode.WALKING // 設成步行 (預設是google.maps.TravelMode.DRIVING 開車)
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
[/js]

延伸閱讀:
Google Map API 3.0 https://developers.google.com/maps/documentation/javascript/directions?hl=zh-tw

讓佛祖、耶酥一起保佑程式碼無BUG,比乖乖有效?

微博上看到各國機房為了確保主機穩定不出怪事,請出法師、大師、神父到機房作法、禱告。

台灣最聞名的就是放乖乖了,然後要記得是綠燈(正常)的椰子乖乖:)

最近程式設計師流行直接寫在CODE裡,像上次寫的機器上除了要擺乖乖外,程式碼也該加上佛祖保佑,今天更出現耶穌版本。

[pascal]
// |~~~~~~~|
// | |
// | |
// | |
// | |
// | |
// |~.\\\_\~~~~~~~~~~~~~~xx~~~ ~~~~~~~~~~~~~~~~~~~~~/_//;~|
// | \ o \_ ,XXXXX), _..-~ o / |
// | ~~\ ~-. XXXXX`)))), _.–~~ .-~~~ |
// ~~~~~~~`\ ~\~~~XXX’ _/ ‘;)) |~~~~~~..-~ _.-~ ~~~~~~~
// `\ ~~–`_\~\, ;;;\)__.—.~~~ _.-~
// ~-. `:;;/;; \ _..-~~
// ~-._ `” /-~-~
// `\ / /
// | , | |
// | ‘ / |
// \/; |
// ;; |
// `; . |
// |~~~—–…..|
// | \ \
// | /\~~–…__ |
// (| `\ __-\|
// || \_ /~ |
// |) \~-‘ |
// | | \ ‘
// | | \ :
// \ | | |
// | ) ( )
// \ /; /\ |
// | |/ |
// | | |
// \ .’ ||
// | | | |
// ( | | |
// | \ \ |
// || o `.)|
// |`\\\\) |
// | |
// | |
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 耶穌保佑 永無 BUG
[/pascal]
同場加映
[pascal]
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`—‘\___
// .’ \\| |// ‘.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ – /// | |
// | \_| ”\—/” |_/ |
// \ .-\__ ‘-‘ ___/-. /
// ___’. .’ /–.–\ `. .’___
// ."" ‘< `.___\_<|>_/___.’ >’ "".
// | | : `- \`.;`\ _ /`;.`/ – ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-‘=====
// `=—=’
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永無bug
//
//***************************************************
[/pascal]

cmd.fm 下指令聽音樂玩遊戲的網站

無意間發現了一個酷站,是模仿DOS界面的音樂網站,不管是查詢、播放、音量都需要打指令,適合技術狂熱的朋友。
主頁面可以看到音樂來源是soundcloud,這網站透過api取得音樂。
常用的指令:
聽音樂的話就輸入 play rock ,就會播放rock類型的音樂….
調音量就輸入 volume 1~100
暫停就輸入 pause
繼續播就打 resume
上一首 back
下一首 next
從help看到有遊戲,如果打mario就出現瑪莉兄弟…..

服務名稱: cmd.fm
網址: https://cmd.fm/
cmd.fm02 cmd.fm03 cmd.fm04
cmd.fm01

cmd.fm05

聖誕節快樂

因為有facebook的關係,所以很少分享生活中的點滴。不過就破例一下 🙂

昨天跟太平洋百貨豐原店企劃課林幽蘭課長合照,出現了美女與野獸(野生壽山)的照片~最後換了一套結合萬聖節及聖誕節的「生膽老公公」造型裝扮~
結果有不少人來合照,還有媽媽叫小朋友過去合照,小朋友不敢還被媽媽笑沒膽XD
來!靠近我就生膽給你了XD

anyway~還是祝大家聖誕節快樂!Merry Xmas~

 

1459094_984337424913273_6452567582794794122_n1800356_10152429949666541_4533522340688898873_n

Delphi 7 從健保局下載zip檔案順便解壓縮

由於學校還使用Delphi 7,為了要教同學從網路上下載檔案加上解壓縮費了不少力氣。順便就記錄一下如何從健保局抓下檔案後,然後一道解壓縮。

1.Delphi7沒有壓縮元件,所以要尋求免費的資源。幸好有Opensource的Delphi 7zip元件
網址:https://code.google.com/p/d7zip/
下載之後解壓縮會有三個檔案
7z.dll
readme.html
sevenzip.pas

2.把7z.dll跟sevenzip.pas放到程式目錄下(散佈程式時記得.exe檔跟7z.dll要一起copy)。
3.回到Delphi7的Project→add to project把sevenzip.pas加進專案
4.File→Use Unit選Sevenzip.pas後就可以開始寫code了
5.畫面上佈置如下圖
(text設為http://www.nhi.gov.tw/Resource/webdata/2976_1_hospbsc.zip)
delphi7zip02
6.ButtonClick程式如下
[pascal]
procedure TForm1.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
i:integer;
tempfile,extname,filename1:String;
begin
ms := Tmemorystream.Create;
ms.Clear;
ms.Position :=0;
try
idhttp1.Get(edit1.text,ms);
ms.SaveToFile(ExtractFilePath(Application.ExeName)+’\test.zip’);
except
end;
if fileexists(ExtractFilePath(Application.ExeName)+’\test.zip’) then
begin
with CreateInArchive(CLSID_CFormatZip) do
begin
OpenFile(ExtractFilePath(Application.ExeName)+’\test.zip’);
for i := 0 to NumberOfItems – 1 do
if not ItemIsFolder[i] then begin
tempfile := ItemPath[i];
extname:=ExtractFileExt(tempfile);
if extname =’.txt’ then
filename1:=tempfile;
end;
ExtractTo(ExtractFilePath(Application.ExeName));
end;
Memo1.Lines.LoadFromFile(Filename1);
end;
end;
[/pascal]
藥品健保藥價資料集
P.S idhttp1.HandleRedirects := True;

Mac安裝laravel

  • 終端機輸入下列指令取得最新版本composer
  • curl -sS https://getcomposer.org/installer | php
  • 接著輸入下面指令讓終端機能直接執行
  • mv composer.phar /usr/local/bin/composer
  • 到MAMP下載安裝(http://www.mamp.info)
  • cd /Applications/MAMP/htdocs/
  • composer create-project laravel/laravel laraveltest
  • 會出現沒有安裝mcrypt,在mac是由於mac預設的版本跟MAMP不同
  • 看一下mamp的PHP版本
  • cd –
  • nano .bash_profile
  • 加上 export PATH=/Applications/MAMP/bin/php/php5.5.3/bin/:$PATH
  • 重新建立專案

中文網域轉換設定Addon Domains

addondomain01

目前有開放中文網域,不過在虛擬主機上Cpanel設定Addon Domains會出現錯誤,這時候需要透過PUNYCODE轉換才能將網域名稱從Unicode 編碼轉成DNS系統的編碼。

 

addondomain02

可以透過IDN Converter(https://manage.centralnic.com/support/idn_converter)把網域放在左邊的輸入框,按下Convert to PunyCode,就可以得到PunyCode編碼。addondomain03
最後將Punycode編碼的網域名稱貼進去就可以成功設定:)

PChome網址購買後設定

domain11

 

1‧ 在上次購買網址後,如果付款成功入帳,就可以進入管理我的網址

domain13

2. 進入後,可以看到還沒付錢的網址。有付款成功的就會出現在網址清單下,我們可以進入DNS設定與修改的進入開始設定

domain14

 

3. 自管DNS是如果有自己的DNS Server可以指定domain15

 

4. 另外一種是DNS交給PChome管理~如果你要轉到特定網址的話倒是可以直接用它

domain165. Page Parking是申請.tw比較特別的功能,twnic貼心提供申請.tw網域的朋友快速架站的方式。