Часто во многих разработках нам нужно реализовать функциональность уже присущую в других имеющихся у Вас программах: калькуляторах, редакторах текста и.т.д. Среда программирования Delphi, используя Windows API, позволяет поместить окна почти любых приложений, вместе со всеми выполняемыми им функциями, внутри рабочего пространства Вашей программы. Для этого достаточно знать дескриптор главного окна запущенного приложения. В этой статье я приведу простейший пример . поместим в нашу программу стандартный калькулятор Windows.
Приступим. Открыв новый проект, создадим в визуальном редакторе GroupBox1 и разместим его в выбранном месте. Также создадим кнопку - Button1.
Теперь напишем простенький код, вызов которого поместим в обработку нажатия кнопки Button1.
procedure TForm1.Button1Click(Sender: TObject);
var
wnd:HWND;
begin
WinExec(PChar('calc.exe'),0);
// Ищем дескриптор окна запущенной программы
wnd := FindWindow(PChar('SciCalc'),nil);
// проверяем результаты поиска окна
if wnd <> 0 then
//Теперь владельцем калькулятор является GroupBox1
Windows.SetParent(wnd, GroupBox1.Handle)
else ShowMessage('Не удалось найти приложение калькулятора. ');
end;
Функция WinExec выбрана специально как самая простая для понимания. Однако рекомендуется использовать ShellEcecute с более сложными параметрами. А для Word или Excel я рекомендую использовать OLE автоматизацию с ранним или поздним связыванием.
Вам, наверное, будет интересно то, откуда я узнал имя класса калькулятора 'SciCalc.? Для этого была использована утилита WinSight идущая стандартно в поставке Delphi. Надо заметить, что необходимым условием данного примера является наличие проинсталлированной программы .Калькулятор..
То, что получилось можно увидеть на рисунке в конце статьи. Как мы можем увидеть, программа .Калькулятор. размещена в вашей программы, перемещается и отображается только внутри GroupBox1, являющимся теперь ее владельцем. Привычный <Щс детства> калькулятор теперь в нужном нам месте. Также можно заметить, что калькулятор перемешается и рисуется только в пределах своего нового владельца.
Подобным образом можно внедрить в свою программу Word, Excel, игры Windows и другие программы. В своих разработках, к примеру, я часто использую внедренный в мою программу Excel со скрытыми меню, заголовками и панелями кнопок. Привычные к этому продукту пользователи даже не догадываются, что работают все в том же Excel, управляемым моей программой. Однако, описание запуска и поиска нужных окон этого продукта это отдельная статья , так как сложные программы имеют очень .норовистые. окна.
Искренне Ваш - RollBack
|