HSPでツリー形式防災関連リンク集を作る
1.概要
ブラウザでネットサーフィンしているとお気に入りが溜まって、だんだん整理したくなくなります。大きな地震や大雨など
日々の天気予報なども気にして、気象関連などのサイトも良く閲覧しています。今回、防災関連に特化したカテゴリでの
整理したツリー形式のリンク集を作って、いざという時に素早く情報が取得できるように備えます。
2.利用方法 eqlink.exeを起動します。3つのカテゴリである「防災」、「交通機関」、「河川防災」のボタンで リンク一覧を切替ます。リンクデータは、データベース化しており、ボタンクリック毎にツリー形式のデータIDで親、子、孫を判別してテーブルより読み込んでいます。 また、終了時にウィンドウ位置を保存して、起動時に反映させています。
リンク集データは、だいぶ以前に作ってメンテしていないので、この機会にメンテして最新としています。
3.ソースコード ソースコードは、HSPスクリプト言語で作成しています。ツリーメニューは、JavaScriptで記述していて、データベースのテーブルより リンク名とURLをコードに挿入しています。バッファにソースコードを生成して格納後、一時ファイルを作成して起動させています。 終了時にウィンドウの位置を設定情報としてデータベースに書き込み、一時ファイルを削除して終了します。
4.ダウンロード 提供するソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
紹介した防災関連リンク (eqlink.exe)は、下記よりダウンロードして下さい。
ダウンロード
2.利用方法 eqlink.exeを起動します。3つのカテゴリである「防災」、「交通機関」、「河川防災」のボタンで リンク一覧を切替ます。リンクデータは、データベース化しており、ボタンクリック毎にツリー形式のデータIDで親、子、孫を判別してテーブルより読み込んでいます。 また、終了時にウィンドウ位置を保存して、起動時に反映させています。
リンク集データは、だいぶ以前に作ってメンテしていないので、この機会にメンテして最新としています。
3.ソースコード ソースコードは、HSPスクリプト言語で作成しています。ツリーメニューは、JavaScriptで記述していて、データベースのテーブルより リンク名とURLをコードに挿入しています。バッファにソースコードを生成して格納後、一時ファイルを作成して起動させています。 終了時にウィンドウの位置を設定情報としてデータベースに書き込み、一時ファイルを削除して終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | ;**************************************************************************** ;* ;* 防災関連リンク (eqlink.hsp) Ver1.1 ;* ;* <処理の概要> ;* 本プログラムは、防災関連リンク集をJavascriptを利用したツリーメニュー ;* 形式をIEオブジェクトを利用して表示するものである。 ;* リンクの作成は、階層化したデータベースのメニューテーブルより展開し ;* ており、メニューテーブルをメンテすれば、カスタマイズ可能である。 ;* ;**************************************************************************** #include "sqlele.hsp" #packopt type 0 #packopt name "eqlink" #packopt runtime "hsprt" #packopt manifest "app.manifest" #packopt icon "SetDisp.Ico" #packopt hide 1 #pack "linkbtn.png" #define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}" #define DISPID_NAVIGATECOMPLETE2 252 #define TEMP_FILE dir_cur+"/exec.tmp" ;***** カーソルの形状を変更 ***** #module #uselib "user32.dll" #func LoadCursorFromFile "LoadCursorFromFileA" var #func LoadCursor "LoadCursorA" int,int #func SetClassLong "SetClassLongA" int,int,int #func SetCursor "SetCursor" int #define IDC_ARROW $00007F00 #deffunc chengecur int prm1,str prm2,int prm3 UserMode = prm1 : if UserMode<0 : return -1 sdim Curfname,260 Curfname = prm2 ;カーソルファイル名 resourceID = prm3 ;リソースID (0~ ;UserMode=$200 でカーソルファイル名が設定されていた場合は、 ;ユーザーカーソルを設定 if (UserMode==$200)&(strlen(Curfname)!0) { LoadCursorFromFile varptr(Curfname) hcurwnd=stat SetClassLong hwnd,-12,hcurwnd SetCursor hcurwnd sdim Curfname,0 return 0 } ;リソースIDに対応するカーソルを設定 (object Mode) (ID=0~28) hinst=0 : lpszCursor=IDC_ARROW if resourceID>=5 : resourceID+=123 LoadCursor hinst,resourceID+lpszCursor hcurwnd=stat ;if UserMode==$100 { ; hCld=hwnd ; }else{ hCld=objinfo(UserMode,2) ;} SetClassLong hCld,-12,hcurwnd SetCursor hcurwnd sdim Curfname,0 return 0 #global #module #uselib "kernel32.dll" #cfunc CreateMutex "CreateMutexA" int,int,sptr #cfunc GetLastError "GetLastError" ;***** 二重起動防止 ***** #deffunc wexapend str prm1 strname=prm1 ;***** 名前の文字列が省略された場合 ***** if strlen(strname)==0 : strname= "HSP340ONIWND" ; Default String ret=CreateMutex(0,1,strname) ;二重起動か? if GetLastError()==0 : return 0 ;同じジョブが起動していない if GetLastError()==183 : return 1 ;既に起動している return -1 #global ;***** 起動ディレクトリ取得 ***** sdim Startdir,512 if hspstat&1=0 { Startdir=dir_exe+ "¥¥" : chdir dir_exe } else { Startdir=dir_cur+ "¥¥" } chdir Startdir ;***** データベース存在確認 ***** exist Startdir+ "setting¥¥eqlink.ini" if strsize ==-1 { dialog "データベースファイルが見つかりません。" ,0 : end } await wexapend "eqlink" : if stat : end ;***** データベースオープン ***** sql_open Startdir+ "setting¥¥eqlink.ini" onexit goto *owari ;***** 画面表示位置設定 ***** sql_q "SELECT * FROM TValu WHERE ID = " +1 xpos=sql_i( "wxpos" ) : ypos=sql_i( "wypos" ) if (xpos<0 or xpos>ginfo_dispx) : xpos=0 if (ypos<0 or ypos>ginfo_dispy) : ypos=0 buffer 2,200,22,0 : picload "linkbtn.png" ,0 screen 0,360,410,,xpos,ypos color 234,234,242 : boxf color 220,220,220 : boxf 0,378,360,378 color 200,200,200 : line 0,379,360,379 color 255,255,255 : line 0,380,360,380 pos 3,384 : objsize 60,22 : objimage 2,0,0,60,22 : button "" ,*mode01 pos 66,384 : objsize 70,22 : objimage 2,60,0,130,22 : button "" ,*mode02 pos 139,384 : objsize 70,22 : objimage 2,130,0,200,22 : button "" ,*mode03 chengecur 0, "" ,14 pos 0, 0 : axobj ie, "Shell.Explorer.2" , 360, 367 target = "00" flag = "00" *main ;***** 実行用HTMLを生成 ***** sdim buff,5000 : sdim UPD_INFO,128,7 buff = "<html><head>¥n" buff+= "<meta http-equiv=¥" Content-Type¥ " content=¥" text/html; charset=shift-jis¥ ">¥n" buff+= "<meta http-equiv=¥" Content-Script-Type¥ " content=¥" text/javascript¥ ">¥n" buff+= "<meta http-equiv=¥" Content-Style-Type¥ " content=¥" text/css¥ ">¥n" buff+= "<style type=¥" text/css¥ ">¥n" buff+= ".default_text {¥n" buff+= " cursor: head;¥n" buff+= " color: #000000;¥n" buff+= " text-decoration: none;¥n" buff+= " font-family: Meiryo UI;¥n" buff+= " font-size: 11px;¥n" buff+= "}¥n" buff+= ".highlight_text {¥n" buff+= " cursor: hand;¥n" buff+= " color: #000000;¥n" buff+= " background-color: #00ffff;¥n" buff+= " text-decoration: none;¥n" buff+= " font-family: Meiryo UI;¥n" buff+= " font-size: 11px;¥n" buff+= "}¥n" buff+= ".marginset {¥n" buff+= " margin-left: 2px;¥n" buff+= " display: block;¥n" buff+= "}¥n" buff+= ".ifstyle {¥n" buff+= " border-left: 0px solid #ffffff;¥n" buff+= " border-right: 0px solid #ffffff;¥n" buff+= " border-top: 0px solid #ffffff;¥n" buff+= " border-bottom: 0px solid #ffffff;¥n" buff+= "}¥n" buff+= "</style>¥n" buff+= "<script language=¥" JavaScript¥ " type=¥" text/javascript¥ "><!--¥n" buff+= "//***** Icon名定義 *****¥n" buff+= "var IconImgPath = ¥" ./image/¥ ";¥n" buff+= "var IconSet = new Array(2);¥n" buff+= " IconSet[0] = ¥" ic00.gif¥ ";¥n" buff+= " IconSet[1] = ¥" ic01.gif¥ ";¥n" buff+= " IconSet[2] = ¥" ic02.gif¥ ";¥n" buff+= "function ClickAction(idMenu){¥n" buff+= " if(idMenu.style.display!=¥" block¥ "){¥n" buff+= " idMenu.style.display=¥" block¥ ";¥n" buff+= " }¥n" buff+= " else{¥n" buff+= " idMenu.style.display=¥" none¥ ";¥n" buff+= " }¥n" buff+= "}¥n" buff+= "function ClickOpen(idMenu){¥n" buff+= " idMenu.style.display=¥" block¥ ";¥n" buff+= "}¥n" buff+= "function rollon() {¥n" buff+= " if (window.event.srcElement.className == ¥" default_text¥ ") {¥n" buff+= " window.event.srcElement.className = ¥" highlight_text¥ ";¥n" buff+= " }¥n" buff+= "}¥n" buff+= "document.onmouseover = rollon;¥n" buff+= "function rolloff() {¥n" buff+= " if (window.event.srcElement.className == ¥" highlight_text¥ ") {¥n" buff+= " window.event.srcElement.className = ¥" default_text¥ ";¥n" buff+= " }¥n" buff+= "}¥n" buff+= "document.onmouseout = rolloff;¥n" buff+= "function writeParent(name,idnameShow,path,no,tframe){¥n" buff+= " if(path==¥" ¥ "){¥n" buff+= " document.write(¥" <span class= 'default_text' onClick='ClickAction(¥"+idnameShow+¥");'>¥");¥n" buff+= " document.write(¥" <img src= '¥"+IconImgPath+IconSet[no]+¥"' width='16' height='16' align='absmiddle'>¥");¥n" buff+= " document.write(¥" ¥ "+name);¥n" buff+= " document.write(¥" </span> ¥ ");¥n" buff+= " }¥n" buff+= " else{¥n" buff+= " document.write(¥" <span class= 'default_text' onClick='ClickAction(¥"+idnameShow+¥");'>¥");¥n" buff+= " document.write(¥" <img src= '¥"+IconImgPath+IconSet[no]+¥"' width='16' height='16' align='absmiddle'>¥");¥n" buff+= " document.write(¥" </span>¥ ");¥n" buff+= " document.write(¥" <span class= 'default_text' onClick='ClickOpen(¥"+idnameShow+¥");'>¥");¥n" buff+= " document.write(¥" <a href= '¥"+path+¥"' target='¥"+tframe+¥"' class='default_text'>¥"+name+¥"</a>¥");¥n" buff+= " document.write(¥" </span> ¥ ");¥n" buff+= " }¥n" buff+= "}¥n" buff+= "function writeChild(name,path,no,tframe){¥n" buff+= " document.write(¥" <a href= '¥"+path+¥"' target='¥"+tframe+¥"' class='default_text'>¥");¥n" buff+= " document.write(¥" <img src= '¥"+IconImgPath+IconSet[no]+¥"' width='16' height='16' border='0' align='absmiddle'>¥");¥n" buff+= " document.write(¥" ¥ "+name);¥n" buff+= " document.write(¥" </a> ¥ ");¥n" buff+= "}¥n" buff+= "//--></script>¥n" buff+= "</head><body bgcolor=¥" #eaeaf2¥ ">¥n" buff+= "<table width=322 height=380 border=0 cellpadding=0 cellspacing=0>¥n" buff+= "<tr>¥n" buff+= " <td width=322 align=¥" left¥ " valign=¥" top¥ ">¥n" ;***** 階層メニューを作成する ***** sql_q "SELECT * FROM TREETABLE WHERE pid = '" +target+ "'" + "ORDER BY cid ASC" count = stat nID = "a" ReadRec = 0 CHUPD_INFO = "" repeat count,1 UPD_INFO(1) = sql_v( "pid" ) UPD_INFO(2) = sql_v( "p_name" ) UPD_INFO(3) = sql_v( "cid" ) UPD_INFO(4) = sql_v( "c_name" ) UPD_INFO(5) = sql_v( "cmid" ) UPD_INFO(6) = sql_v( "m_name" ) UPD_INFO(7) = sql_v( "urllink" ) ;***** 孫IDを退避 ***** MGUPD_INFO = UPD_INFO(5) ;***** 親カテゴリ名を代入 ***** if UPD_INFO(1)==flag { buff+= "<div class=¥" marginset¥ " style=¥" padding-left:6px¥ "<nobr>¥n" buff+= " <script>¥n" buff+= " writeParent(¥" "+UPD_INFO(2)+" ¥ ",¥" a0¥ ",¥" ¥ ",2,¥" ¥ ");¥n" buff+= " </script>¥n" buff+= " <div id=a0 style=¥" display:block:margin-left:10px;¥ ">¥n" } ;***** 前回の孫IDと今回の孫IDが変化した場合 ***** if (flag== "00" ) or (flag== "01" ) or (flag== "02" ) : goto *skip if MAGO_INFO!=UPD_INFO(5) { buff+= " </script>¥n" buff+= " </div>¥n" } *skip flag= "99" ;***** 子カテゴリ名を代入 ***** if CHUPD_INFO!=UPD_INFO(3) { ReadRec++ buff+= " <script>¥n" buff+= " writeParent(¥" "+UPD_INFO(4)+" ¥ ",¥" "+nID+ReadRec+" ¥ ",¥" ¥ ",1,¥" ¥ ");¥n" buff+= " </script>¥n" buff+= " <div id=" +nID+ReadRec+ " style=¥" display:block:margin-left:10px;¥ ">¥n" buff+= " <script>¥n" buff+= " writeChild(¥" "+UPD_INFO(6)+" ¥ ",¥" "+UPD_INFO(7)+" ¥ ",0,¥" _blank¥ ");¥n" } ;***** 孫カテゴリ名を代入 ***** if CHUPD_INFO==UPD_INFO(3) { buff+= " writeChild(¥" "+UPD_INFO(6)+" ¥ ",¥" "+UPD_INFO(7)+" ¥ ",0,¥" _blank¥ ");¥n" } ;***** 子IDを退避 ***** CHUPD_INFO=UPD_INFO(3) ;***** 前回孫IDを退避 ***** MAGO_INFO=UPD_INFO(5) sql_next loop buff+= " </script>¥n" buff+= " </div>¥n" buff+= "</nobr></div>¥n" buff+= " </td>¥n" buff+= "</tr>¥n" buff+= "</table>¥n" buff+= "</body></html>¥n" bsave TEMP_FILE, buff, strlen(buff) ie-> "Navigate" "file:///" +TEMP_FILE comevent ie_event, ie, DIID_DWebBrowserEvents2, *event gsel 0,1 stop *event dispid = comevdisp(ie_event) if dispid = DISPID_NAVIGATECOMPLETE2 title "防災関連リンク" return *mode01 ;***** 防災関連 ***** target = "00" : flag = "00" : objsel 3 : goto *main *mode02 ;***** 交通機関 ***** target = "01" : flag = "01" : objsel 3 : goto *main *mode03 ;***** 都道府県河川 ***** target = "02" : flag = "02" : objsel 3 : goto *main *owari ;***** 終了処理 (DB CLOSE) ***** wx=str(ginfo_wx1) ; 現在の画面左上 X 座標取得 wy=str(ginfo_wy1) ; 現在の画面左上 y 座標取得 ;***** 終了位置をDBへ保存 ***** sql_q "UPDATE TValu SET wxpos=" + prm_text(wx) + ", wypos=" + prm_text(wy)+ " WHERE ID=" +1 sql_close ;***** 一時ファイルを削除 ***** exist Startdir+ "exec.tmp" if strsize !=-1 { delete Startdir+ "exec.tmp" } end |
4.ダウンロード 提供するソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
紹介した防災関連リンク (eqlink.exe)は、下記よりダウンロードして下さい。
ダウンロード
コメント
コメントを投稿