Главная страница
    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.01 c
1-38379
Юный_программер
2003-02-02 16:11
2003.02.13
Как на форме вытаскивать иконку то одну а то другую?


14-38474
aLEX1.5
2003-01-29 21:43
2003.02.13
Чат для локальной сети


1-38225
stone
2003-02-05 10:16
2003.02.13
Переход к указанной строке текстового файла


1-38333
anaTolik
2003-02-03 18:00
2003.02.13
Загрузка проекта.


1-38220
IDKFA
2003-02-05 08:35
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский