掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Webbrowser1と2のダブルクリックされた方の判別 (ID:44570)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
皆様よろしくお願いします。環境はWindows7 Delphi 6 Personalです。 下記のコードはWebBrowser1とWebBrowser2をFormにおいて それぞれフォルダパスを表示させておきます。 それぞれのアイコンをダブルクリックしてアイコンのフルパスを取得 しようと試みているコードです。 質問: もし、WebBrowser2だけなら表示中のフォルダパスに取得したファイル名を 付ければフルパスを取得できるのですが、 WebBrowserが2個だとどちらのアイコンをダブルクリックしたか 判別する手法が解りません(#この状態ではWebBrowser2しか取得できない) lParamの数字が違うので何とか判別できないか試みましたが 知識がありません。 ダブルクリックしたコントロールを取得できないでしょうか。 WebBrowser1WebBrowser2のフォルダパスは判っているわけですから それぞれのフォルダパスに付ければフルパスが取得できると 考えています。 よろしくお願いします。 const LV_name = 'SysListView32'; var Form1: TForm1; HookID : THandle; implementation //WinSearchはMr.XRAY氏のユニットを使用しサンプルを参考にしました // http://mrxray.on.coocan.jp/Halbow/ProgCode/WinSearch.txt //これを拡張子をpasにしてprojectに追加しました。 uses WinSearch,CommCtrl{LVIS_SELECTED; で必要}; {$R *.dfm} //---------------------サムネイルをダブルクリックしたフルパスを取得したい function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall; var Str : String; ItemCount : Integer; hListView : HWND; procedure FileNameGet; var iState : Integer; i : Integer; mask : Integer; pszText : array[0..255] of AnsiChar; begin mask := LVIS_SELECTED; for i:=0 to ItemCount-1 do begin iState := ListView_GetItemState(hListView,i,mask); if (iState and LVIS_SELECTED)<>0 then begin ListView_GetItemText(hListView,i,0,pszText,SizeOf(pszText)); Str:= pszText; { //ここでどちらのWebbrowserをダブルクリックしたか記憶を判定できれば if '記憶の判定' then Str:= ('Webbrowser1に表示しているフォルダパス')+ str else Str:= ('Webbrowser2に表示しているフォルダパス')+ str;} break; end; end; end; var szClassName : array[0..255] of Char; begin if (nCode < 0) then begin Result := CallNextHookEx(HookID, nCode, wParam, lParam); exit; end; if (wParam = WM_LBUTTONDBLCLK) then begin hListView := FindChildOfClass(Form1.Handle,LV_Name); ItemCount := ListView_GetItemCount(hListView); GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND,szClassName,SizeOf(szClassName)); //ここでどちらのWebbrowserをダブルクリックしたかを記憶できれば if lstrcmp(@szClassName[0], @LV_name[1]) = 0 then begin FileNameGet; showmessage(str); //ここでどちらのWebbrowserをダブルクリックしたか //記憶を判定できれば フルパスを表示できる {if '記憶の判定' then showmessage(str) //Webbrowser1の処理 esle showmessage(str); //Webbrowser2の処理} Result := HC_SKIP; exit; end; end; Result := CallNextHookEx(HookID, nCode, wParam, lParam); end; procedure TForm1.FormCreate(Sender: TObject); begin HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()); //フック開始 Webbrowser1.Navigate('フォルダパス'); Webbrowser2.Navigate('フォルダパス'); end; procedure TForm1.FormDestroy(Sender: TObject); begin if HookID <> 0 then UnHookWindowsHookEx(HookID);//フック終了 end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.