Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

SelectDirectory   Найти похожие ветки 

 
lety   (2003-02-05 18:34) [0]

Вызываю функцию SelectDirectory("Выберите папку, где находятся ....","",s).
Окошко неизменно появляется в правом нижнем углу.
Его можно как-нибудь переместить?


 
gsu   (2003-02-05 18:50) [1]

напиши свой диалог или используй OpenDialog


 
lety   (2003-02-05 19:21) [2]

нет, мне SelectDirectory - как раз то, что надо
но местоположение смущает немного


 
Романов Р.В.   (2003-02-05 19:34) [3]

Так попробуй

uses ShellAPI, ShlObj;
{$R *.DFM}

function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
const
_left = 60;
_top = 150;
var
wp: TWindowPlacement;
begin
Result := 0;
if uMsg = BFFM_INITIALIZED then
begin
GetWindowPlacement(Wnd, @wp);

SetWindowPos(Wnd, 0, _left, _top,
wp.rcNormalPosition.Right - wp.rcNormalPosition.Left,
wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top,
SWP_NOZORDER + SWP_NOACTIVATE);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
TitleName : string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Form1.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := "Выберите папку, где находятся ....";
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
BrowseInfo.lpfn := BrowseCallbackProc;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
ShowMessage(TempPath);
GlobalFreePtr(lpItemID);
end;
end;


 
Романов Р.В.   (2003-02-05 20:10) [4]

Так наверно лучше будет

uses ShlObj, ActiveX;

function BrCbProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
const
_left = 60;
_top = 150;
var
R: TRect;
begin
Result := 0;
if uMsg = BFFM_INITIALIZED then
begin
GetWindowRect(Wnd, R);
SetWindowPos(Wnd, 0, _left, _top, R.Right - R.Left, R.Bottom - R.Top,
SWP_NOZORDER + SWP_NOACTIVATE);
end;
end;

function SelectDirectory(const Caption: string; const Root: WideString;
out Directory: string): Boolean;
var
WindowList: Pointer;
BrowseInfo: TBrowseInfo;
Buffer: PChar;
RootItemIDList, ItemIDList: PItemIDList;
ShellMalloc: IMalloc;
IDesktopFolder: IShellFolder;
Eaten, Flags: LongWord;
begin
Result := False;
Directory := "";
FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
begin
Buffer := ShellMalloc.Alloc(MAX_PATH);
try
RootItemIDList := nil;
if Root <> "" then
begin
SHGetDesktopFolder(IDesktopFolder);
IDesktopFolder.ParseDisplayName(Application.Handle, nil,
POleStr(Root), Eaten, RootItemIDList, Flags);
end;
with BrowseInfo do
begin
hwndOwner := Application.Handle;
pidlRoot := RootItemIDList;
pszDisplayName := Buffer;
lpszTitle := PChar(Caption);
ulFlags := BIF_RETURNONLYFSDIRS;
lpfn := BrCbProc;
end;
WindowList := DisableTaskWindows(0);
try
ItemIDList := ShBrowseForFolder(BrowseInfo);
finally
EnableTaskWindows(WindowList);
end;
Result := ItemIDList <> nil;
if Result then
begin
ShGetPathFromIDList(ItemIDList, Buffer);
ShellMalloc.Free(ItemIDList);
Directory := Buffer;
end;
finally
ShellMalloc.Free(Buffer);
end;
end;
end;


 
Shadow   (2003-02-05 20:20) [5]

Млин, как все сложно - то %)) А узнать Handle и через SetWindowPos никак?


 
Романов Р.В.   (2003-02-05 20:25) [6]

Shadow © (05.02.03 20:20)
Наверно можно в отдельном потоке, т.к. это окно показывается модально.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-38093
able
2003-01-25 21:23
2003.02.13
Help!!!


14-38514
passm
2003-01-28 13:32
2003.02.13
Список используемых (открытых) файлов


14-38534
Влад2003
2003-01-29 10:27
2003.02.13
Виртуальный CD-ROM


4-38620
Tolea
2002-12-30 11:10
2003.02.13
Закрытие окон


14-38549
JibSkeart
2003-01-22 12:56
2003.02.13
Убить(удалить) программу во время выполнения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский