Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Вниз

Панель инструментов из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.255 c
15-1187703680
Бася
2007-08-21 17:41
2007.09.16
Покритикуйте и научите :)


15-1185471908
Константинов
2007-07-26 21:45
2007.09.16
Delphi забоставал


15-1187538724
Piter
2007-08-19 19:52
2007.09.16
Очень классная иллюзия


4-1174744851
Ma[X]iM
2007-03-24 17:00
2007.09.16
Загрузка процессора


2-1187604813
Bast
2007-08-20 14:13
2007.09.16
Окно





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский