Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как открыть проводник диска А из своей программы в модальном окне [D5, Win95/98]


иван61 ©   (2002-09-08 21:35:00) 

Просмотр содержимого диска А делаю так:
ShellExecute(Form9.Handle,PChar("open"), PChar("A:\"), nil,nil,SW_ShowNormal);
Как сделать чтобы окно проводника открывалось в модальном режиме?
Чтобы при клике мимо него оно не перекрывалось другими окнами?
Заранее спасибо.


Steven   (2002-09-10 05:33:00) [1]

попробуй d6 и ShellListView.


Игорь Шевченко   (2002-09-09 15:22:00) [2]

Ученик © (09.09.02 13:50)

В WinNT работает не так, как задумано :-(


Ученик   (2002-09-09 13:50:00) [3]

>Игорь Шевченко © (09.09.02 13:34)
Все работает как задумано


Игорь Шевченко   (2002-09-09 13:34:00) [4]

Ученик © (09.09.02 13:25)

А проверить не мешает - получите массу положительных эмоций :-)


Ученик   (2002-09-09 13:25:00) [5]

>Игорь Шевченко © (09.09.02 13:09)
"Другие окна" не определены :-)


Alx2   (2002-09-09 13:15:00) [6]

Вообще-то сделать модальным чужое окно ИМХО х/з.

Но что-то кривое наподобие получилось, правда с названием класса "CabinetWClass" - подходить придется довольно индивидуально.


var
Inst: THandle;
wnd: hwnd;
count: integer;
begin
Inst := ShellExecute(Handle, "open", "A:\", nil, nil, SW_ShowNormal);
if Inst > 32 then
begin
count := 1;
repeat
sleep(10); // даем время раскочегариться (до ~10с)
wnd := FindWindow("CabinetWClass", "A:\"); //
Ищем форточку с классом CabinetWClass и заголовком A:\. Вот здесь нужно уточнить или найти способ определения этого класса у explorera.
inc(count);
until (wnd <> 0) or (count > 1000);
if wnd = 0 then ShowMessage(SysErrorMessage(GetLastError))
else
begin
SetWindowPos(wnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); // Вытаскиваем экплорнутое окошко наверх и приколачиваем его к этому верху.
Enabled := false; // Приглушаем наше окошко
while IsWindow(wnd) do // Ученик (c)
begin
Sleep(10);
Application.ProcessMessages;
end;
Enabled := true; // Возвращаемся к полноценной жизни
end;
end;
end;


Игорь Шевченко   (2002-09-09 13:09:00) [7]

Ученик © (09.09.02 11:27)

А попробовать ? :-)))
Вы делаете недоступным окно своего приложения, но все остальные приложения прекрасно перекрывают окно проводника :-)

С уважением,


Ученик   (2002-09-09 11:27:00) [8]

procedure TForm1.Button3Click(Sender: TObject);
var
ShellWindow : HWnd;
begin
ShellExecute(Handle, "open", "A:\", nil, nil, SW_ShowNormal);
ShellWindow := GetForegroundWindow;
Enabled := False;
while IsWindow(ShellWindow) do Application.ProcessMessages;
Enabled := True;
end;


Inan61   (2002-09-09 10:09:00) [9]

Уделите внимание моей проблеме.
Очень нужно!!!
Заранее спасибо


Наверх

Титульная страница Поиск, карта сайта Написать письмо