Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Панель инструментов из DLL [XP]


Страницы:   1 2

Галинка ©   (2007-08-23 15:33:00) 

как можно создать панель инструментов в длл, по количеству классов в ней? Это во-первых. Как потом эту панель загрузить в приложение?


Галинка   (2007-08-24 15:14:00) [1]

clickmaker ©   (24.08.07 14:59) [23]

оказалось, что мало чем. И теперь она проживает в ДЛЛ ))

b z   (24.08.07 15:06) [24]

если это все ради Assembly.GetTypes() то понятно. Собственно и работает ужо ))

Всем ура ...


b z   (2007-08-24 15:06:00) [2]


> Галинка ©   (24.08.07 14:15) [20]

вот вкратце про офис
http://www.ablebits.com/office-toolbar-controls/

см в сторону интерфейсов
в "закромах" нашел (это когда-то делалось еще при FW 1)

Assembly assembly1 = Assembly.LoadFrom(Path.Combine(Path.GetDirectoryName(base.GetType().Assembly.Loc ation), (string) plugins[obj]));
Type[] typeArray = assembly1.GetTypes();
for (int num1 = 0; num1 < typeArray.Length; num1++)
{
Type type1 = typeArray[num1];
...
object[] objArray = new object[0];
IPlugin plugin = (IPlugin) Activator.CreateInstance(type1, objArray);
ну и т.д. это конечно не кул но как идея думаю понятно :)


clickmaker   (2007-08-24 14:59:00) [3]


> [22] Галинка ©   (24.08.07 14:23)

ну если это плавающая панель, то чем она концептуально отличается от просто формы из другой сборки?


Галинка   (2007-08-24 14:23:00) [4]

clickmaker ©   (24.08.07 14:20) [21]

это уже есть )) спасибо тебе который раз. Но хотелось бы не
> В приложении
> for c := 0; c < classCount; c++ {
>  создать панель
>  for op := 0 op < class[c].operationCount; op++  {
>    создать кнопку + привязать к ней имя метода класса из
> DLL
>  }
> }


а ы самой длл-ке. И потом просто вызывать процедуру (?) и выалая панель тут ))


clickmaker   (2007-08-24 14:20:00) [5]


> [18] Галинка ©   (24.08.07 13:47)

Допустим, есть DLL (.NET-сборка, как я понимаю?). В ней 3 класса, для каждого - набор операций.
В приложении
for c := 0; c < classCount; c++ {
 создать панель
 for op := 0 op < class[c].operationCount; op++  {
   создать кнопку + привязать к ней имя метода класса из DLL
 }
}
потом, с помощью рефлекшн, можно динамически (Invoke) дергать этот метод. Разумеется, параметры должны быть как-то формализованы.
Нечто наподобие плагинной архитектуры.

Акробат или Промпт работают через COM-интерфейсы, скорей всего


Галинка   (2007-08-24 14:15:00) [6]

b z   (24.08.07 14:03) [19]

тогда расскажи как?


b z   (2007-08-24 14:03:00) [7]


> Как например это делает Акробат или Промт

боюсь утверждать :), но они такого не делают


Галинка   (2007-08-24 13:47:00) [8]

Да не в этом проблема. Точнее эту я еще вчера решила.

Но пока на стороне приложения. Т.е. как clickmaker сказал, при инициализации главной формы идет "сборка" панели инструментов. Но это подразумевает, что при добавлении нового класса в длл, придется лезть в приложение и добавлять соотв обработку в функцию ToolStripCreate. Но хотелось бы просто "передавать" готовую панель из ДЛЛ в приложение. Как например это делает Акробат или Промт ))


clickmaker   (2007-08-24 13:39:00) [9]


>  [14] Галинка ©   (24.08.07 13:29)

ну а почему нет-то?
схематично так
for (i = 0; i <  DLLClassesCount; i++)
 Toolbar.AddButton(DLLClass[i]);

+ если библиотека реализует некие методы для работы с классом, то цеплять к кнопке имя метода


Игорь Шевченко   (2007-08-24 13:37:00) [10]


> а возможно ли все же сделать динамически формируемую панель?
>  Чтобы при добавлении классов в библиотеку панель менялась
> вместе с ней и не задевалось главное приложение?


возможно.
Reflection - rulezz fareva


Галинка   (2007-08-24 13:34:00) [11]

Что-то типа как у Adobe, например. Ставишь Акробат проффесиоанльный и получаешь его панель инструментов в офисе. Вот так бы и мне.


Галинка   (2007-08-24 13:29:00) [12]

а возможно ли все же сделать динамически формируемую панель? Чтобы при добавлении классов в библиотеку панель менялась вместе с ней и не задевалось главное приложение?


Галинка   (2007-08-23 17:19:00) [13]

Все получилось. Досталось и поставилось все. Всем спасибо.


b z   (2007-08-23 16:26:00) [14]


> Как в соотв кнопку загрузить иконку из длл для соотв.класса?

см. Embedded Resource, System.Resources.ResourceManager, Assembly.GetManifestResourceStream ...


Игорь Шевченко   (2007-08-23 16:19:00) [15]

если .Net то очень просто ВСЕ достается через reflection.


> наверное надо перенестись в конференцию .Net


В "Начинающих" самое место


Галинка   (2007-08-23 16:15:00) [16]

все получилось. Всем спасибо. Особенно clickmaker'у )))


Leonid Troyanovsky   (2007-08-23 16:11:00) [17]


> Галинка ©   (23.08.07 16:02) [8]

> В смысле? Классы оттуда достать можно. Но надо всегда заранее

Доктор сказал в bpl, значит в bpl.

> Пы Сы: наверное надо перенестись в конференцию .Net ((

А.. Ну, извини.

--
Regards, LVT.


Галинка   (2007-08-23 16:02:00) [18]

Leonid Troyanovsky ©   (23.08.07 16:00) [7]

В смысле? Классы оттуда достать можно. Но надо всегда заранее знать, что там есть.

Пы Сы: наверное надо перенестись в конференцию .Net ((


Leonid Troyanovsky   (2007-08-23 16:00:00) [19]


> Галинка ©   (23.08.07 15:56) [5]

> Первый вопрос на вскидку: как опросить ДЛЛ какие классы
> в ней хранятся?

Не вижу смысла хранить там классы, если доставать можно
лишь простые типы. Ну, или ресурсы.

--
Regards, LVT.


Галинка   (2007-08-23 15:57:00) [20]

Как в соотв кнопку загрузить иконку из длл для соотв.класса?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо