線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1547
推到 Plurk!
推到 Facebook!

如何得知WINDOWS Dialog的"取消"按鈕有被Click

答題得分者是:flyup
linkhanks
一般會員


發表:3
回覆:11
積分:2
註冊:2006-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-21 15:16:11 IP:60.248.xxx.xxx 訂閱

function CopyDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY;
pFrom := PChar(fromDir #0);
pTo := PChar(toDir)
end;
Result := (0 = ShFileOperation(fos));
end;

請問使用以上程式碼所呼叫出WINDOWS Dialog來COPY資料夾,如何取得該"取消"按鈕被Click,有查過WINDOWS SDK,可是看沒有@@,請指點一下方向~~謝謝!!

flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-24 23:09:16 IP:219.70.xxx.xxx 未訂閱

資料來源: http://www.scalabium.com/faq/dct0157.htm

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses ShlObj;
{$R *.dfm}
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; stdcall;
begin
if (uMsg = BFFM_INITIALIZED) then
SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
BrowseCallbackProc := 0;
end;

function GetFolderDialog(Handle: Integer; Caption: string; var strFolder: string): Boolean;
const
BIF_STATUSTEXT = $0004;
BIF_NEWDIALOGSTYLE = $0040;
BIF_RETURNONLYFSDIRS = $0080;
BIF_SHAREABLE = $0100;
BIF_USENEWUI = BIF_EDITBOX or BIF_NEWDIALOGSTYLE;

var
BrowseInfo: TBrowseInfo;
ItemIDList: PItemIDList;
JtemIDList: PItemIDList;
Path: PAnsiChar;
begin
Result := False;
Path := StrAlloc(MAX_PATH);
SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, JtemIDList);
with BrowseInfo do
begin
hwndOwner := GetActiveWindow;
pidlRoot := JtemIDList;
SHGetSpecialFolderLocation(hwndOwner, CSIDL_DRIVES, JtemIDList);

{ return display name of item selected }
pszDisplayName := StrAlloc(MAX_PATH);

{ set the title of dialog }
lpszTitle := PChar(Caption);//'Select the folder';
{ flags that control the return stuff }
lpfn := @BrowseCallbackProc;
{ extra info that's passed back in callbacks }
lParam := LongInt(PChar(strFolder));
end;

ItemIDList := SHBrowseForFolder(BrowseInfo);

if (ItemIDList <> nil) then
if SHGetPathFromIDList(ItemIDList, Path) then
begin
strFolder := Path;
Result := True
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S:String;
begin
s := 'D:\A';
if GetFolderDialog(Application.Handle, '選擇一個資料夾', s) then
ShowMessage('所選擇的資料夾為: ' s)
else
ShowMessage('已取消資料夾選擇!');
end;

end.

linkhanks
一般會員


發表:3
回覆:11
積分:2
註冊:2006-07-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-26 14:14:16 IP:60.248.xxx.xxx 訂閱

感謝~~^^我試試看~~

系統時間:2024-04-19 4:23:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!