Добрый всем день! 1. Есть приложение которое работает в полно-экранном режиме. (использует DirectDraw) Задача: В DirectDraw определить область, чтобы запустить другое приложение DirectDraw внутри этой области. (Запустить DirectDraw приложение внутри другого окна DirectDraw????) Подскажите пожалуйста, как это сделать!??? Заранее благодарен!
globe_2007 какие программы? Ищи информацию по Surface, Overlay и для начала прочитай как работает DirectDraw.
Есть прога, выводящая на экран в графическом режиме (DD) данные, в зависимости от ходных параметров. Надо сделать другую прогу, тоже в графике DD, которая запустит эту прогу в 4-х экземплярах. Каждый экземпляр будет со своими параметрами. Надо свести эти 4 экрана в один и отображать их одновременно, каждый в своём окне.
globe_2007 в твоем случае легче пропатчить программу под оконный режим. И запускать четыре копии программы с разными входными данными. У тебя будет четыре окна.
...пропатчить - не представляю, как это сделать. Не хотелось бы вмешиваться в готовую программу. Я попробовал вариант с ShellExecuteEx. Но он не прошёл. Может я что-то не так делаю? Код (Text): procedure TForm1.Button1Click(Sender: TObject); var WndApp : HWND; begin GetMem(ProcInfo, SizeOf(ProcInfo^)); ZeroMemory(ProcInfo, SizeOf(ProcInfo^)); with ProcInfo^ do begin Wnd := self.Handle; cbSize := SizeOf(ProcInfo^); lpFile := PChar(Example1); lpParameters := nil; lpVerb := 'open'; //nShow := SW_SHOW; nShow := SW_HIDE; fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS; end; try Win32check(ShellExecuteEx(ProcInfo)); finally WaitForSingleObject(ProcInfo.hProcess, 1000); if ProcInfo.hProcess <> 0 then CloseHandle(ProcInfo.hProcess); Dispose(ProcInfo); end; // ищем окно WndApp := FindWindow(nil, 'Function results'); if WndApp <> 0 then begin // подчиняем найденное окно Windows.SetParent(WndApp, self.Handle); // убрать рамку и заголовок Windows.SetWindowLongA(WndApp, GWL_STYLE, GetWindowLongA(WndApp, GWL_STYLE) and not (WS_Overlapped or Ws_caption or WS_ThickFrame)); // подвинем окно Windows.SetWindowPos(WndApp, HWND_TOP, 8, 10, 480, 640, SWP_NOSIZE); // восстановим размеры экрана ResetScreen(true); // показать окно с результатами Windows.ShowWindow(WndApp, SW_SHOW); end; end;
Мне представляется такое. Пишем библу - прехватчик DD. Она шаманит под свои нужды (отключает полноэкранный режим, предоставляет свои поверхности.) И так 4 экземпляра. Есть главное приложение - сервер, которое получает данные от библ - прехватчиков и выводит данные как нужно. Наверно будет нужен более-менее приличный процессор. Но всё это изврат конечно. ^)
Booster вполне нормальный вариант если его правильно реализовать. Нужно подменить первичную поверхность и выводить на внеэкранную . блиттить туда все ч поверхности от перехватчиков-длл как нужно и прорисовывать в приложении сервере уже внеэкранную эту на экран.