Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Панель инструментов из DLL   Найти похожие ветки 

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

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


 
Юрий Зотов ©   (2007-08-23 15:38) [1]

> Галинка ©   (23.08.07 15:33)  

По количеству классов в ней - это как? Это во-первых.

С DLL могут быть проблемы (или более сложная реализация). С BPL проблем не будет. Это во вторых.

:о) - это в-третьих.


 
clickmaker ©   (2007-08-23 15:42) [2]

а почему бы не создавать панель прямо в приложении на основании инфы из ДЛЛ?
это в-четвертых


 
Сергей М. ©   (2007-08-23 15:44) [3]


> Галинка


Галиматьища несусветная.


 
Юрий Зотов ©   (2007-08-23 15:46) [4]

> clickmaker ©   (23.08.07 15:42) [2]

Грамотно. Развязка по реализации - 100%-ная, проблем - никаких. Жму руку.


 
Галинка ©   (2007-08-23 15:56) [5]

clickmaker ©   (23.08.07 15:42) [2]

мысля хорошая. Надо ее подумать.

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


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

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


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


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

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

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

--
Regards, LVT.


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

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

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

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


 
Leonid Troyanovsky ©   (2007-08-23 16:11) [9]


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

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

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

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

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

--
Regards, LVT.


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

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


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

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


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


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


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


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

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


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

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


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

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


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

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


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


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


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


 
clickmaker ©   (2007-08-24 13:39) [17]


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

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

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


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

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

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


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


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

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


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

b z   (24.08.07 14:03) [19]

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


 
clickmaker ©   (2007-08-24 14:20) [21]


> [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:23) [22]

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:59) [23]


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

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


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


> Галинка ©   (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);
ну и т.д. это конечно не кул но как идея думаю понятно :)


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

clickmaker ©   (24.08.07 14:59) [23]

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

b z   (24.08.07 15:06) [24]

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

Всем ура ...



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.029 c
5-1160204158
xolin
2006-10-07 10:55
2007.09.16
Как заблокировать CloseUp по LButtonClick для ComboBox?


15-1187433979
GhosTer
2007-08-18 14:46
2007.09.16
Где взять?


2-1187955169
hprx
2007-08-24 15:32
2007.09.16
Работа с клавиатурой.


15-1187241020
Sonia
2007-08-16 09:10
2007.09.16
У меня просто нет слов...


15-1187519778
ArtemESC
2007-08-19 14:36
2007.09.16
Спикер ПК