一応やってみました.
(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.
ソースコード付けました.ダウンロードできます. ■添付ファイル webbrowser_test0.zip |