Форум: "WinAPI";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];
ВнизВстраиваемые приложения Найти похожие ветки
← →
boris3b (2008-10-28 12:33) [0]Задача: Из приложения [B]А[/B] запускается приложение [B]В[/B] посредством CreateProcess. Хитрым способом получаю Handle приложения [B]В[/B]. Отправляю приложению [B]В[/B] некую команду (строку), в которой передаю Handle приложения [B]А[/B] и Handle панели этого приложения. Приложение [B]В[/B] получив команду меняет своё ParentWindow на Handle панели.
В итоге приложение [B]В[/B] как бы встраивается в приложение [B]А[/B], НО если перебрать все контролы и компоненты панели, на которую встроилось приложение [B]В[/B], то там ничего нет. Соответственно не работают ни какие ограничения (Constraints) приложения [B]В[/B]. Получается полное Г.
Вопрос: Как грамотно из одной проги запустить другую и [U]правильно[/U] встроить её на панель первой проги.
← →
tesseract © (2008-10-28 12:36) [1]А зачем вообще такие махинации, зачем вообще делать исполнимый файл ?
ISpecifyPropertyPage в DLL и никакого шаманства.
← →
boris3b (2008-10-28 12:44) [2]Что такое ISpecifyPropertyPage?
Суть моей задачи следующая: есть приложение, которое будет у каждого юзера (клиент). Это приложение получает из БД список других доступных приложений и создает соответственно кнопки для их запуска. Нажав на такую кнопку должно запуститься требуемое приложение и встроиться в данного клиента. В итоге можно потихоньку создавать новые проги для решения различных задач и добавлять инфо о них в БД. А клиент со временем не меняется.
← →
Сергей М. © (2008-10-28 13:01) [3]
> получаю Handle приложения
Как можно получить то чего не существует в природе ?
← →
boris3b (2008-10-28 13:14) [4]
> Как можно получить то чего не существует в природе ?
Лучше бы по делу чего сказал, чем к словам придираться!
Пусть будет "Handle окна, в котором запущено приложение"
← →
Сергей М. © (2008-10-28 13:19) [5]
> Пусть будет "Handle окна, в котором запущено приложение"
>
И это тоже не существует в природе.
← →
tesseract © (2008-10-28 16:36) [6]
> Что такое ISpecifyPropertyPage?
Справка не работает ? Это такой COM-интерфейс для встривания в GUI - например в панель управления в настройки мыши / клавиатуры пихаеться параметры от того же logitech - это стандартная модель. И кстати функциональность к интерфейсу ну никак не привязана.
Ты сейчас занимаешься полной бессмыслицей, ты где нибудь плагин в виде exe видел ?. Для таких дел существует COM/DCOM и дитя их ActiveX. DCOM кстати совершенно по барабану на какой машине он запущен. Да и хранить файлы в базе тоже не кайф.
> В итоге можно потихоньку создавать новые проги для решения
> различных задач
Жаргоничик студенческий. В общем тебе нужно смотреть на COM/ActiveX или .Net сборки.
← →
boris3b (2008-10-28 16:58) [7]
> Жаргоничик студенческий
Несколько обидная фраза - года уже не те. Года 3 назад разбирался с ActiveX и делал ActiveX Form, но очень хотелось бы, чтоб всё работало без дополнительных dll и ActiveX. Появилась в БД запись о новой программе -> при запуске клиента скачивается готовый exe-файл -> запускается и встраивается в клиента.
Вся нагрузка на клиента - это предоставление списка доступных программ, их запуск/завершение и слежение за местоположением/размерами относительно клиента.
Пример - на FreeBSD есть программа Contact. Она содержит в себе контакты персон, почту, календарь, задачи/проекты... Во время работы данной программы, если посмотреть список выполняемых процессов, то видно, что каждая - это отдельный процесс. Отсюда и возникла моя "бредовая" идея - как сделать программу масштабируемой. Т.е. сегодня я еще не знаю, какую задачу мне надо будет реализовать завтра, но условие, чтобы всё запускалось из одной программы уже поставлено.
← →
Сергей М. © (2008-10-28 17:03) [8]Да запускай себе на здоровье что угодно где угодно !
Но причем здесь какое-то там "встраивание" ?
> Соответственно не работают ни какие ограничения (Constraints)
Ты ни шиша не понимаешь работы этого свойства.
Вот с изучения оного и начни, прежде чем обижаться.
← →
boris3b (2008-10-28 17:33) [9]
> Ты ни шиша не понимаешь работы этого свойства.
Спорить не буду. Даже спасибо скажу за внимание к моему вопросу. Обида - так, секундный эмоциональный порыв.
Со словарным запасом у меня видимо беда. Технарь я до мозгов костей. С человеками трудно общаюсь.
У меня в принципе уже всё работает. Если есть ещё силы обсуждать - давай попробуем...
Все контролы приложения В расположены на одной панели. При получении некой строковой команды от прил.А данная панель меняет своё ParentWindow на Handle панели приложения А. Теперь визуально кажется, что программа одна. Это я и называю встраиванием (заголовок на TaskBar я прячу).
Далее при изменении размеров панели прил.А по средствам передачи строковых команд меняет свое местоположение и размеры панель прил.В.
Теперь ставим панели прил.B constraints.MinWidth := 400; Когда я уменьшаю ширину прил.А уменьшается и прил.В, пока оно не станет = 400. Далее прил.В ужЕ Уже не станет, а прил.А об этом ни чего не знает.
На этом месте я застопорился. Можно конечно далее перекидывать всякие команды между приложениями, но понимаю, что это всё криво и не правильно.
Мне казалось, что если я делаю Panel1.ParentWindow := Panel2.Handle, то у Panel2 должно было увеличиться ControlCount, а на практике такого не случилось. Также мне кажется, что если бы мои ожидания оправдались, то работали бы и св-ва Align и constraints, да и вообще всё было бы "в шоколаде"...
← →
Сергей М. © (2008-10-28 20:03) [10]
> у Panel2 должно было увеличиться ControlCount, а на практике
> такого не случилось
И не должно было.
А с какого, спрашивается, перепугу оно должно было случиться ?
Рассуждай вслух ..
← →
tesseract © (2008-10-28 21:37) [11]
> но очень хотелось бы, чтоб всё работало без дополнительных
> dll и ActiveX. Появилась в БД запись о новой программе -
>
епт типо exe уже чем-то круче? В обсчем сейчас ты знаимаешься ректальной реализацией давно уже реализованного стандартными методами. Если хочешь иметь дело именно с VCL реализацией то нужно детально изучать структуру bpl и детали сношения с памятью VCL.
> Года 3 назад разбирался с ActiveX и делал ActiveX Form,
Я в возрасте полгода в пелёнки писал. Вырос понял что это неудобно. Ты в принципе не понимаешь как всё работает. ActiveX Form, это то ещё недоразумение.
← →
Германн © (2008-10-29 01:26) [12]
> tesseract © (28.10.08 16:36) [6]
>
> Ты сейчас занимаешься полной бессмыслицей, ты где нибудь
> плагин в виде exe видел ?
Я видел. Даже сам был однажды инициатором такого подхода. Но я никогда не болел тем, чтобы окно "внешнего" exe-шника встраивать в окно вызывающей программы.
Не. Я бы тоже советовал бы СОМ, но они не потянули бы. :(
P.S. Недавно один из них освоил основы ActiveX и теперь он хочет непременно получать для своей программы "драйверы устройств" по такой технологии.
← →
boris3b (2008-10-29 09:43) [13]
> Я в возрасте полгода в пелёнки писал. Вырос понял что это
> неудобно
Не понял, а научили. Иж, какие мы высокопарные. Из всего тобой сказанного только первый пост в тему. Остальное - попытки тупо всё обосрать. На других форумах люди делали также как я и свои задачи решали. Все посты в уважительной форме и по делу.
В общем - иди ты лесом...
← →
Сергей М. © (2008-10-29 09:49) [14]
> Остальное - попытки тупо всё обосрать
Надеяться на остро пока нет повода)
Тебя заточка волнует или ты все же готов к диалогу, ведущему к осознанию где и в чем твоя ошибка ?
Вопрос в [10] остался без ответа ..
← →
tesseract © (2008-10-29 10:09) [15]
> Все посты в уважительной форме и по делу.
> Остальное - попытки тупо всё обосрать.
Тебе сказали по делу - COM. Не мучайся с остальным, "по делу" это как ? Дают куски когда с WASM.ru ? Ты имей в виду в Висте такое может не заработать.
← →
boris3b (2008-10-29 10:28) [16]> Надеяться на остро пока нет повода)
>
> Тебя заточка волнует или ты все же готов к диалогу, ведущему
> к осознанию где и в чем твоя ошибка ?
>
Первое предложение не понятно из-за опечатки.
К диалогу готов.
Хотелось бы от Вас услышать, как бы сделали Вы? Если нужно еще какие-то детали описать - спрашивайте.
В идеале это должно работать и в WinXP и в WinVista и на FreeBSD под Wine.
← →
Сергей М. © (2008-10-29 10:36) [17]
> boris3b (29.10.08 10:28) [16]
Нет, подожди ..
Речт идет о логике или ее напрочь отсутствии.
Вот ты заявил, что тебе "казалось".
Я хочу проследить твою логику и предлагаю тебе вслух изложить основания для такого предположения..
← →
boris3b (2008-10-29 10:55) [18]
> Вот ты заявил, что тебе "казалось".
> Я хочу проследить твою логику и предлагаю тебе вслух изложить
> основания для такого предположения..
Вот чую, что это ещё одна попытка посмеяться над моими плясками с бубном.
Казалось мне потому, что:
1. Мои знания как взаимодействует VCL с API - никакие.
2. Я использую родное свойство VCL-компонента - ParentWindow, а не API - SetParent. И если почитать Delphi Help на ParentWindow, то там есть следующее - "This allows references to the control by applications based on other applications."
← →
Сергей М. © (2008-10-29 11:26) [19]
> ещё одна попытка посмеяться
Что ж ты такой закомплексованный-то, а ?)
> если почитать Delphi Help на ParentWindow, то там есть следующее
Да, есть.
Но где там хоть какое-либо упоминание о ControlCount ?
И о каком ControlCount может идти речь, если родительским окном становится, к примеру, произвольное окно, не имеющее ни малейшего отношения к VCL ?
В конце-концов, если есть сомнения в справ.информации, открываем генофонд и видим там истину:procedure TWinControl.SetParentWindow(Value: HWnd);
begin
if (FParent = nil) and (FParentWindow <> Value) then
begin
if (FHandle <> 0) and (FParentWindow <> 0) and (Value <> 0) then
begin
FParentWindow := Value;
Windows.SetParent(FHandle, Value);
if (Win32MajorVersion >= 5) and (Win32Platform = VER_PLATFORM_WIN32_NT) then
Perform(WM_CHANGEUISTATE, MakeWParam(UIS_INITIALIZE, UISF_HIDEACCEL or UISF_HIDEFOCUS), 0);
end else
begin
DestroyHandle;
FParentWindow := Value;
end;
UpdateControlState;
end;
end;
Где здесь хоть какой-либо намек на ControlCount ?
Нет его.
И в UpdateControlState тоже ничего подобного нет.
Все что по сути делается - вызывается API-функция SetParent и следом перерисовываются все видимые окна, имеющие отношение к старому и новому родству окна переносимого к новому родителю контрола.
> 1. Мои знания как взаимодействует VCL с API - никакие
Ты же не предпринял элементарных телодвижений, чтобы они появились, откуда ж им взяться ?
> использую родное свойство VCL-компонента - ParentWindow,
> а не API - SetParent
Элементарные, как видишь, исследования показывают, что установка TWinControl.ParentWindow сводится к вызову Windows.SetParent.
← →
boris3b (2008-10-29 11:50) [20]Закомплексованность моя от широты поставленной задачи, сжатых сроков и нехватки знаний, да и времени получать эти знания, не говоря уже об опыте.
В общем иду я лесом сам в направлении COM. Если можете помочь найти книгу для скачки "Эрик Хармон "Разработка COM- приложений в среде Delphi" буду признателен.
P.S.: Всегда серьёзно относился к программированию БД, а к интерфейсу клиента так - красивые фантики, всегда получались без особых заморочек. А тут встрял.
← →
Сергей М. © (2008-10-29 12:06) [21]
> если перебрать все контролы и компоненты панели, на которую
> встроилось приложение [B]В[/B], то там ничего нет
А собссно зачем этот перебор нужен ?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c