お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"OpenDialogを使ったディレクトリ選択Dlg"



  みなさん、こんにちは。

  OpenDialog を使った Directory選択Dialog です。
マズイところがあったら、指摘してください。

implementation

{$R *.DFM}

var
  EditHandle, ComboHandle,
  LabelFNameHandle,LabelFilterHandle,LabelDirHandle,
  ButtonOpenHandle: Longint;
  Flag: boolean;

function EnumChildProc(const HWND, lParam: Longint): Boolean; stdcall;
var
  cName,
  cText: array[0..256]of Char;
begin
  Result := True;
  if (lParam = 1) and (GetClassName(HWND, cName, 255) > 0) then
  begin
    // EditFileName
    if StrComp('Edit', cName) = 0 then
      EditHandle := HWND
    // ComboBoxFilter
    else if (StrComp('ComboBox', cName) = 0) then
      ComboHandle := HWND
    // LabelFName
    else if (StrComp('Static', cName) = 0)        and
            (GetWindowText(HWND, cText, 255) > 0) and
            (StrComp('ファイル名(&N):', cText)    = 0)       then
      LabelFNameHandle := HWND
    // LabelFilter
    else if (StrComp('Static', cName) = 0)        and
            (GetWindowText(HWND, cText, 255) > 0) and
            (StrComp('ファイルの種類(&T):', cText)    = 0)       then
      LabelFilterHandle := HWND
    // LabelDir
    else if (StrComp('Static', cName) = 0)        and
            (GetWindowText(HWND, cText, 255) > 0) and
            (StrComp('ファイルの場所(&I):', cText)    = 0)       then
      LabelDirHandle := HWND
    // ButtonOpen
    else if (StrComp('Button', cName) = 0)        and
            (GetWindowText(HWND, cText, 255) > 0) and
            (StrComp('開く(&O)', cText)    = 0)       then
      ButtonOpenHandle := HWND
  end;
end;

function FindEditCombo(const FormHandle: Longint): Boolean;
begin
  Result := False;
  if IsWindow(FormHandle) then
  begin
    EnumChildWindows(FormHandle, @EnumChildProc, 1);
    Result := IsWindow(EditHandle)       and
              IsWindow(ComboHandle)      and
              IsWindow(LabelFNameHandle) and
              IsWindow(LabelFilterHandle) and
              IsWindow(LabelDirHandle) and
              IsWindow(ButtonOpenHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Flag := True;
  OpenDialog1.FileName := 'dummy.dat';  // 適当
  OpenDialog1.Filter := '*.*|*.*';
  OpenDialog1.Title := 'フォルダの選択';
  if OpenDialog1.Execute then
  begin
    Edit1.Text := ExtractFileDir(OpenDialog1.FileName);
    Edit2.Text := ExtractFilePath(OpenDialog1.FileName);
  end;
end;

procedure TForm1.OpenDialog1Show(Sender: TObject);
var
  DialogHandle: HWND;
  pc: PChar;
begin
  if OpenDialog1.Title='' then
    pc := PChar('開く')
  else
    pc := PChar(OpenDialog1.Title);
  DialogHandle := FindWindow('#32770', pc);
  FindEditCombo(DialogHandle);
//  FindEditCombo(OpenDialog1.Handle);  // これだとうまくいかない
end;

procedure TForm1.OpenDialog1FolderChange(Sender: TObject);
begin
  if Flag and
     IsWindow(EditHandle)       and IsWindow(ComboHandle) and
     IsWindow(LabelFNameHandle) and IsWindow(LabelFilterHandle) and
     IsWindow(LabelDirHandle)   and IsWindow(ButtonOpenHandle) then
  begin
    Flag := False;
    ShowWindow(EditHandle,SW_HIDE);
    ShowWindow(ComboHandle,SW_HIDE);
    ShowWindow(LabelFNameHandle,SW_HIDE);
    ShowWindow(LabelFilterHandle,SW_HIDE);
    SetWindowText(LabelFNameHandle,PChar(''));  // '***(&T)' '***(&T)'
    SetWindowText(LabelFilterHandle,PChar('')); // を無視するように空文字に
しておく
    SetWindowText(LabelDirHandle,PChar('フォルダの場所(&I)'));
    SetWindowText(ButtonOpenHandle,PChar('OK'));
  end;
end;

      牧原博司 QZS03450@nifty.ne.jp  - 99年03月04日 (Thu) 22時37分 -


Original document by 牧原 博司   氏 ID:(QZS03450)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum