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

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

Модальные окна [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]

Открыть эту форму модально.


Наверх

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