![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модальные окна [D6, Win95/98, Win2k]
VetMIg © (2002-08-30 01:59:00)Как сделать, чтобы внешний открытый файл, а точнее окно, стало модальным для главной формы моей проги
Almaz (2002-08-31 23:39:00) [1]
> Suntechnic © (31.08.02 06:28)
> >Almaz © (31.08.02 04:31)
> Я бы лично использовал Wait-ф-ции, хотя и в них есть определённый
> недостаток. Зато родительский процесс не будет пожирать
> процессорное время на полую катушку.
Лично я бы тоже, но тогда либо родитель будет "висеть", либо нужно создавать отдельный поток, а это ,IMHO, несколько не соответствует постановке задачи о "модальности". Хотя, что автор вкладывает в понятие модальность... :)
Удачи.
МИФИст (2002-08-31 13:12:00) [2]SetParent
This function changes the parent window of the specified child window.
HWND SetParent(
HWND hWndChild,
HWND hWndNewParent );
Parameters
hWndChild
Handle to the child window.
hWndNewParent
Handle to the new parent window. If this parameter is NULL, the desktop window becomes the new parent window.
Suntechnic (2002-08-31 06:28:00) [3]>Almaz © (31.08.02 04:31)
Я бы лично использовал Wait-ф-ции, хотя и в них есть определённый недостаток. Зато родительский процесс не будет пожирать процессорное время на полую катушку.
Almaz (2002-08-31 04:31:00) [4]
> VetMIg © (30.08.02 01:59)
> Как сделать, чтобы внешний открытый файл, а точнее окно,
> стало модальным для главной формы моей проги
Что-то вроде этого:
function TForm1.ShowModalProgram(FileName: String): Cardinal;
var
WindowList: Pointer;
ActiveWindow: HWnd;
SI: TStartupInfo;
PI: TProcessInformation;
begin
CancelDrag;
if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
ReleaseCapture;
ActiveWindow := GetActiveWindow;
WindowList := DisableTaskWindows(0);
try
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
if CreateProcess(nil, PChar(FileName), nil, nil, FALSE,
CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI) then
begin
CloseHandle(PI.hThread);
repeat
Application.ProcessMessages;
GetExitCodeProcess(PI.hProcess, Result);
until Result <> STILL_ACTIVE;
CloseHandle(PI.hProcess);
end;
finally
EnableTaskWindows(WindowList);
if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
end;
end;
Удачи.
VetMIg (2002-08-31 01:27:00) [5]Уважаемый, доктор Картер. Вы неправильно меня поняли... Да и Song тоже. Мне надо чтобы не форма, а, допустим открыл я виндовский калькулятор из своей проги, и мне нужно, чтобы он стал модальным для главного окна моей проги.
dr.karter (2002-08-30 12:58:00) [6]Form1.ShowModal; - если я так понимаю.
Song (2002-08-30 09:09:00) [7]Открыть эту форму модально.