ページ 1 / 1
リッチエディットのURL検出
Posted: 2005年12月13日(火) 15:34
by 長瀬
みなさんはじめまして。
リッチエディットを作って、EM_AUTOURLDETECTを送ってURLの検出はできたのですが、
URL検出部分にマウスが来たり、マウスがクリックされたときを知るにはどうすればよろしいでしょうか?
Posted: 2005年12月13日(火) 21:40
by konisi
コード: 全て選択
Function OnMouse(ByRef X As DWord,ByRef Y As DWord) As DWord
Dim A As POINTAPI
Dim B As RECT
GetWindowRect(_PromptSys_hWnd,B)
GetCursorPos(A)
X=A.x-B.left-6
Y=A.y-B.top-31
OnMouse=-1
End Function
メニューが入っていなければ、これでマウスのクライアントな位置は把握できたと思います。(古いコード、しかもpromptモードのものから引っ張ったのでなんともいえませんが。)
メニューが入っている場合は上の31を少し大きくしてみるなりして工夫してください。
マウスのボタンがクリックされたかどうかは、僕の場合は
コード: 全て選択
if GetAsyncKeyState(1) And &h8000 Then
'左クリック時
Else if GetAsyncKeyState(2) And &h8000 Then
'右クリック時
End if
これでやっちまいます。
Re: リッチエディットのURL検出
Posted: 2005年12月13日(火) 22:53
by Mario2
ここは参考になりませんでしょうか?(C言語ですが…)
[猫でもわかるプログラミング - 第149章 本文中からURLを検出する ]
http://www.kumei.ne.jp/c_lang/sdk2/sdk_149.htm
参考にならなかったらすいません。
Re: リッチエディットのURL検出
Posted: 2005年12月14日(水) 16:38
by 長瀬
> ここは参考になりませんでしょうか?(C言語ですが…)
>
> [猫でもわかるプログラミング - 第149章 本文中からURLを検出する ]
>
http://www.kumei.ne.jp/c_lang/sdk2/sdk_149.htm
>
> 参考にならなかったらすいません。
イベントマスクにENM_LINKを加えるのまで出来たんですが、
WM_NOTIFYメッセージの処理がよくわかりません・・・
Re: リッチエディットのURL検出
Posted: 2005年12月14日(水) 18:18
by Tomorrow
↑のサイトのWM_NOTIFYメッセージハンドラの部分のみをAB風に書き直しただけのものですが...
このコードをMainWnd.sbpのMainWndProc関数内に書いてください。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
コード: 全て選択
Select Case dwMsg
Case WM_NOTIFY
Dim lpnmHdr As *NMHDR
If wParam=ID_RICH Then
lpnmHdr=lParam
Select Case lpnmHdr->code
Case EN_LINK
Dim pEnlink As *ENLINK
pEnlink=lParam
If pEnlink->msg=WM_LBUTTONDOWN Then
SendMessage(hEdit, EM_EXSETSEL, 0, VarPtr(pEnlink->chrg))
SendMessage(hEdit, EM_GETSELTEXT, 0, szURL)
ShellExecute(hEdit, "open", szURL, NULL, NULL, SW_SHOWNORMAL)
End If
End Select
End If
End Select
Re: リッチエディットのURL検出
Posted: 2005年12月14日(水) 20:10
by 長瀬
もしかして、ENLINK構造体の定義とかもしないといけないんですか
よくわかりません・・・(泣)
Re: リッチエディットのURL検出
Posted: 2005年12月16日(金) 13:56
by Tomorrow
ABで定義されてないAPI関数や構造体を定義するときは、まずC言語用定義を探します。
検索エンジンで関数名や構造体名をキーワードにして
MSDNのサイトを見つけるのが、もっとも確実です。
コード: 全て選択
typedef struct {
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
CHARRANGE chrg;
} ENLINK;
C用の構造体定義が見つかったらABの書式に書き換えます。
↓が参考になるでしょう。
http://hira.hopto.org/win32api/convert01.htm
どうしてもわからない場合、Cのヘッダファイルをさがして元の定義が何なのかを調べます。
コード: 全て選択
Type ENLINK
nmhdr As NMHDR
msg As DWord
wParam As WPARAM
lParam As LPARAM
chrg As CHARRANGE
End Type
過去ログを探すと他の人がすでに定義したものが見つかるかもしれません。
また、
こちらのサイトではAB用のWin32API定義ファイルを公開しています。
これらを切り貼りして利用する手もあります。(著作権等に注意)
Re: リッチエディットのURL検出
Posted: 2005年12月16日(金) 15:46
by 長瀬
>Tomorrow さん
ご紹介いただいたサイトを見ながら出来ました。
ありがとうございました。