регистрация | карта сайта
Постоянно обновляемая лента новостей
Обзоры, комментарии и статьи
Даты и дополнительная информация о событиях компьютерного рынка
Контакты, виды деятельности, предложения и другая информация о компьютерных компаниях
Новости, анонсы и пресс-релизы компьютерных компаний
Конференции с участием ведущих специалистов и экспертов
Информация для пользователей ITware, изменения персональных настроек, персональные закладки и web-карточки, служба переадресации
   
    
     Как искать?   Расширенный поиск
 ITware :. Конкурс статей Borland      Вход для зарегистрированных пользователейВыход

Конкурс статей Borland
Главная страница
Правила участия
Общий рейтинг
Призовой фонд
Сообщество ITware

Логин:
Пароль:
Забыли пароль? Забыли логин?

Зарегистрируйтесь сейчас - это абсолютно бесплатно!
Подпишитесь на рассылку ITware, чтобы ежедневно получать анонсы последних новостей и свежих материалов


CHIP online
Best Buy
Посоветуйся с Чипом!
Downloads

Контакты
Редакция:

Web-мастер:

 
Реклама




Услужливые окна
17 апреля 2003 11:58  rollback количество баллов: 20

Часто во многих разработках нам нужно реализовать функциональность уже присущую в других имеющихся у Вас программах: калькуляторах, редакторах текста и.т.д. Среда программирования 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



Статьи данного автора в акции Borland:
Обсуждение
9 августа 2003 - 19:36 kulikovckiy
Интересное решение, применю в своих программах. Вам мой голос.
18 апреля 2003 - 10:03 rollback Извините
Приношу извинения. Картинка наверное просто не отобразилась.
18 апреля 2003 - 08:38 rollback Нет картинки
Ребята, не понимаю где делась картинка к статье. Плохо, что нельзя предварительно посмотреть то, что отсылаеш на конкурс. Без картинки не видно всего, да и предпоследний абзац теряет смысл :( RollBack
Новое сообщение
Логин:
Пароль:
Заголовок:
Сообщение:

© ICC. Перепечатка допускается
только с разрешения .
Новости Публикации Календарь событий Пресс-центр
IT-каталог: продукты IT-каталог: компании Библиотека
Форум Персональные сервисы Регистрация Карта сайта