Текущий архив: 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.5 MB
Время: 0.043 c