お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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