|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TOpenDialog で「詳細」をデフォルトにする"
【タイトル】TOpenDialog で「詳細」をデフォルトにする
NIFTY:FDELPHI/MES/10/4647 からはじまるコメントツリーの #4694 で出した
コードを整えたものです。
なお、リストビューの表示モードを初期化するタイミングがよくわからなかっ
たので、邪道っぽい手法を使っています(^^;。
type
TTestDialog = class(TOpenDialog)
private
FDone: Boolean;
protected
procedure WndProc(var Message: TMessage); override;
public
function Execute: Boolean; override;
end;
procedure TTestDialog.WndProc(var Message: TMessage);
var
hTarget: HWND;
begin
inherited WndProc(Message);
if not FDone then // 処理は Execute 後に1回だけ実行
begin
hTarget :=
FindWindowEx(GetParent(Handle), 0, 'SHELLDLL_DefView', nil);
if hTarget <> 0 then
begin
FDone := TRUE; // 処理が終わったことを記録
SendMessage(hTarget, WM_COMMAND, $702c, 0);
end;
end;
end;
function TTestDialog.Execute: Boolean;
begin
FDone := FALSE; // フラグを初期化
Result := inherited Execute;
end;
上記のコードには曲者(OS依存の可能性)が2つあります。
その1:
FindWindowEx(GetParent(Handle), 0, 'SHELLDLL_DefView', nil);
の SHELLDELL_DefView が Windows95 以外でも同じクラス名かどうか?
その2:
SendMessage(hTarget, WM_COMMAND, $702c, 0);
の $702c が Windows95 以外でも同じIDかどうか?
どちらも WinSight32 で調べました。
なお、井上 貴之さんに動作確認していただき(NIFTY:FDELPHI/MES/10/4701)
Windows98、WindowsNT4 SP3 + IE4.0、WindowsNT5β1(!)で動作確認されてい
ます。
ということで当面は大丈夫なようでなによりです...
Original document by 河邦 正 氏 ID:(GCC02240)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|