![]()
ウェブブラウザで何が便利か、というと筆頭は「リンク」ではないでしょうか。HTML ファイルとブラウザの組合せでは、ウェブサイトではなくじぶんのパソコンのローカルなファイルでも、リンクを使って、いわゆる「ハイパーテキスト」を作ることができます。紙メディアでは関連項目に飛ぶのに自力でその項目を探して移動しなければならないのと違って、関連項目のリンクをクリックするだけでジャンプしてくれるという、構造化されたドキュメントになるわけですね。
ブラウザを離れて、QXで HTML ファイルを編集しているときも、同じようにダブルクリックでリンク先にジャンプできれば、相互にリンクしたファイルをアップデートするのが楽になります。(このサイトもそれなりにファイルが増えてきて、そういう操作が切実に必要になってきました。)
すでに「単語からファイルを開く」というマクロを作ってあったので、このマクロの HTML 関連部分を以下のようにQXの自動マクロの動作に追加移植してみました。結果 ― おお、ちゃんとダブルクリックでファイルやラベルに飛べる。便利です。そして、気がつきました。QXでは HTML のローカルリンクの書式で書いたファイルの所在を、ちゃんとパスとして認識してくれるんです。すなわち、「../index.htm」、とか、「sub/index.htm」、とかいう表記です。
通常のファイルではダブルクリックは「単語選択」の動作をさせたいので、拡張子に HTM が含まれているときだけ、この動作が実行されるようになっています。
HTML ファイル以外でも同じような考えかたでハイパーリンクをはることができます。それについては「マクロ倉庫」の 【 カーソル位置単語でファイルを開くマクロ 】 の項をごらんください。
proc AutoDoubleClicked
if @@ClickableURL then
if fdbl <> 0 then httpJump
end if
'HTMLファイルならダブルクリックでファイルを開く
dim i, word$, file$, name$, path$, find1, find2
if instr(lcase$(@Filename$), ".htm") = 0 then exit proc
word$ = @GetCursorWord3$("/:#@.~-_!?\|") 'ここで文字種を設定
@@MacroReturnStatus = 1
i = instr(word$, "#")
if i > 0 then
file$ = mid$(word$, 1, i-1)
name$ = mid$(word$, i+1)
else
file$ = word$
name$ = ""
end if
'別ファイルを開く場合
if file$ <> "" then
if dir$(file$) <> "" then 'ファイルの存在をチェック
call @@OpenFile(file$)
else
'カレントディレクトリにないときは、カレントファイルのパスで探す
path$ = left$(@Pathname$, inrstr(@Pathname$, "\"))
if dir$(path$ + file$) <> "" then 'ファイルの存在をチェック
call @@OpenFile(path$ + file$)
else
print cformat$("%s というファイルがみつかりません",file$)
exit proc
end if
end if
end if
'HTML ファイルで NAME タグ指定のとき、ファイル内で移動
if name$ = "" then exit proc
find1 = @@FindCaseSensitive
find2 = @@FindLongestMatch
@@FindRegExp = 1
@@FindRegExp = -2
@@FindCaseSensitive = 0
@@FindLongestMatch = 0
@Redraw = 0
@MoveFileTop
@FindStringBottom "<a +name *= *""?" + name$ + """? *>"
@Redraw = 1
if @@SearchFound = 0 then
print cformat$("ラベル [ %s ] がありません",name$)
end if
@@FindCaseSensitive = find1
@@FindLongestMatch = find2
end proc
上記のコードは別ファイルとしても用意しました。使ってみるときはこれをダウンロードしてください ⇒ 【 qaclick.lzh 】 既存の QACLICK.MAC の proc AutoDoubleClicked の項目の部分をこのコードと差替えます。すでに別の設定がされているときは、条件分岐などを加えてください。
上のコードの、ラベルを正規表現で検索する部分は、ねこみみ さんの「リンクリスト」マクロからの借用です。「フリーウェア」宣言がされていますが、ここで感謝を述べさせていただきます。
![]()