名前 題名 ▼ Mr.XRAYさん > 一応やってみました. > > (1)Button1クリックでフォルダ内のファイルをアイコン表示 > アイコン表示しかできないようです. > (2)SpeedButtonクリックで選択ファイルのファイル名をMemo1に表示 > (3)ファイル上のマウス右クリックで,選択ファイルをMemo1に表示 > > 後は適当に.... > 動作確認環境 WindowsXP(SP2) + Delphi7 Pro > > uses > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, > Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, Buttons; > > type > TForm1 = class(TForm) > Panel1: TPanel; > WebBrowser1: TWebBrowser; > Panel3: TPanel; > Button1: TButton; > Edit1: TEdit; > SpeedButton1: TSpeedButton; > Panel2: TPanel; > Splitter1: TSplitter; > Memo1: TMemo; > procedure FormShow(Sender: TObject); > procedure Button1Click(Sender: TObject); > procedure SpeedButton1Click(Sender: TObject); > procedure FormDestroy(Sender: TObject); > procedure WebBrowser1NavigateComplete2(Sender: TObject; > const pDisp: IDispatch; var URL: OleVariant); > private > { Private 宣言 } > public > { Public 宣言 } > end; > > var > Form1: TForm1; > > implementation > > // WinSearch.pasはHalbow資料館のもの > uses CommCtrl,WinSearch; > > var > hListView : HWND; > ItemCount : Integer; > HookID : THandle; > const > LV_name = 'SysListView32'; > > {$R *.dfm} > > //============================================================================= > // マウスフック関数 > // 右ボタンのみ検出 > // [参考] > // ポップアップメニューを非表示にするにはResultにHC_SKIPを返す > //============================================================================= > function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall; > var > szClassName : array[0..255] of Char; > begin > if (nCode < 0) then begin > Result := CallNextHookEx(HookID, nCode, wParam, lParam); > exit; > end; > > if (wParam = WM_RBUTTONUP) then begin > GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND,szClassName,SizeOf(szClassName)); > if lstrcmp(@szClassName[0], @LV_name[1]) = 0 then begin > Form1.SpeedButton1Click(nil); > end; > end; > Result := CallNextHookEx(HookID, nCode, wParam, lParam); > end; > //============================================================================= > // 確実動作のため,最初から表示しない > //============================================================================= > procedure TForm1.FormShow(Sender: TObject); > begin > Edit1.Text := 'D:\デジカメ画像\20060929大阪'; > Memo1.ScrollBars := ssVertical; > Memo1.Lines.Clear; > > //フック開始 > HookID := SetWindowsHookEx(WH_MOUSE, MouseProc, 0, GetCurrentThreadId()); > end; > //============================================================================= > // フック終了 > //============================================================================= > procedure TForm1.FormDestroy(Sender: TObject); > begin > if HookID <> 0 then UnHookWindowsHookEx(HookID); > end; > //============================================================================= > // ボタンクリックで表示開始 > //============================================================================= > procedure TForm1.Button1Click(Sender: TObject); > begin > WebBrowser1.Navigate(Edit1.Text); > end; > //============================================================================= > // 表示終了したら > // ListViewのハンドルとItem数(ファイル数)を取得しておく > //============================================================================= > procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; > const pDisp: IDispatch; var URL: OleVariant); > begin > //TWebBrowserで使用しているListViewのハンドルを取得 > //FindChildOfClassはHalbow資料館のWinSearch.pasを利用した... > hListView := FindChildOfClass(Handle,LV_Name); > > //アイテム(ファイル)数を取得 > ItemCount := ListView_GetItemCount(hListView); > end; > //============================================================================= > // ListViewのメソッド類については以下を参照 > // http://mtbeta.msdn.microsoft.com/ja-jp/library/aa923178.aspx?altlang=ja-jp > // FindItemというのがあるので,そちらの方がいいかも知れない > // 選択やフォーカス状態が見やすい様にスピードボタンで > //============================================================================= > procedure TForm1.SpeedButton1Click(Sender: TObject); > var > iState : Integer; > i : Integer; > mask : Integer; > pszText : array[0..255] of AnsiChar; > Str : String; > begin > //フォーカス状態も検出するのであれば mask := LVIS_SELECTED or LVIS_FOCUSED; > 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; > Memo1.Lines.Add(Str+' 選択'); > end; > end; > end; > > end. > > ソースコード付けました.ダウンロードできます. GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link