Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

Как открыть проводник диска А из своей программы в модальном окне   Найти похожие ветки 

 
иван61   (2002-09-08 21:35) [0]

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


 
Inan61   (2002-09-09 10:09) [1]

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


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

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;


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

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

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

С уважением,


 
Alx2 ©   (2002-09-09 13:15) [4]

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

Но что-то кривое наподобие получилось, правда с названием класса "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:25) [5]

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


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

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

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


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

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


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

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

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


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

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



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

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-61284
Turalyon
2002-08-23 16:17
2002.09.19
всех Харьковчан с Праздником!


3-61030
RangerBetta
2002-08-30 09:18
2002.09.19
Логическое поле в InterBase


6-61240
Leny
2002-07-15 12:37
2002.09.19
Ошибка при установке связи


14-61305
easy
2002-08-24 17:36
2002.09.19
логическая задача...


1-61180
BT
2002-09-07 22:20
2002.09.19
Как сделать массив Query