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