Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
4-1225268964
XshStasX
2008-10-29 11:29
2009.12.13
интересний результат с ловушкой на WH_SHELL


2-1256729336
Morgan128
2009-10-28 14:28
2009.12.13
Как отследить действия над сторонним окном?


2-1256444215
STD
2009-10-25 07:16
2009.12.13
TIcon


2-1256209981
Dmitriy
2009-10-22 15:13
2009.12.13
Как создать правильный POST-запрос для E-port?


15-1255627268
@!!ex
2009-10-15 21:21
2009.12.13
Бесплатный редактор Flash





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский