![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() дочерние MDI формы находятся в DLL, dll-это плагины. Подскажите можно ли сделать так
1)чтобы при установке этого так называемого плагина на главной форме появлялись дополнительные кнопки в панели управления, которые бы выполняли определеные действия в форме из плагина. 2)в главной форме даже не известно что эти кнопки на панели будут выполнять.Чтобы плагин сам все настраивал 3)При этом если запущено несколько экземпляров дочерних форм из этого плагина, то панель с кнопками была бы одна и управляла бы выбранной формой.(не очень обязательно, но желательно) 4)при выборе окна из другого плагина, чтобы кнопки были не активны 5)при закрытии окна, чтобы панель не пропадала и загрузилась при запуске программы в следующий раз, или может как-то зарание настраивалась бы это(тоже не очень обязательно, но желательно) |
#2
|
||||
|
||||
![]() Я бы наверное сделал следующим образом (обозначу только общую логику):
1) Основная программа при старте ищет плагины/dll, поочередно их подключает и при подключении вызывает какую-либо единую для всех плагинов функцию, которая собственно и будет указывать основной форме, что добавлять и куда. Для реализации этого глянь мануалы по работе с длл и создании элементов управления в процессе выполнения программы. 2) Ну собственно говоря при создании кнопки необходимо ей на событие onclick назначить вызов определенной функции из плагина. Как реализовать не скажу - нет делфи под рукой. 3) Самое простое на мой взгляд - не связывать добавление кнопок и отображение экземпляра дочерней формы. Т.е. при старте программы плагин подключается и сразу добавляются кнопки, а потом уже при необходимости создаются экземпляры дочерних форм. Иначе можно перед добавлением кнопок проверять их наличие, или же сразу после добавления записывать определенное значение в файл настроек (скажем в обычный ini) и при подключении плагина проверять это значение. А чтобы кнопки управляли именно выбранной формой, достаточно просто получить имя формы, которая находится в фокусе. 4) Ну опять таки можно проверять, какое окно получило фокус, а какое потеряло. Если фокус получило окно, не связанное с плагином, просто ставить кнопкам свойство enabled в false. 5) Опять таки можно использовать файл настроек (или реестр) и при старте программы проверять значение данной настройки. P.S.: если что-то не так понял, прошу строго не судить ![]() |
#3
|
|||
|
|||
![]() Цитата:
Цитата:
Цитата:
|
#4
|
||||
|
||||
![]() Очень много полезной информации есть в разделе FAQ данного сайта
![]() В данном случае наиболее полезны будут разделы http://www.delphisources.ru/pages/faq/file_system.html http://www.delphisources.ru/pages/fa...s_classes.html |
#5
|
||||
|
||||
![]() А вообще если честно, то не очень понятно, зачем такие трудности себе создавать?
![]() ![]() |
#6
|
|||
|
|||
![]() заказчику хоцца чобы как в MS SQL Server было все кнопки на панели задач были, проитв этого не порпешь))), мое мнение тоже такое лучше чтобы каждая форма была самодостаточной
|
#7
|
|||
|
|||
![]() сделал таким образом (тестовый вариант)
PHP код:
хотел сделать на OnDeactivate чтобы btn.Enabled:=false , но он как-то срабатывает не понятно когда ему вздумается, особенно если есть дочерние локальные формы не из плагинов. Тут еще нарисовалось парочка проблем 1)не работают свойства MDIChildCount, и ActiveMDIChild. MDIChildCount=только количество локальных дочерних форм ActiveMDIChild=nil или ссылка на локальные дочерние формы если передавать в плагин screen то ситуация немного меняется MDIChildCount отображает правильно, то тогда выдается сообщение об ошибке "cannot assign Tfont to a tfont" при показе подсказок а ActiveMDIChild по прежнему не выдает форму из плагина screnn не передаю и веду отдельный свой список форм запущеных из плагина и там уже среди них искать активные 2)табуляция на форме из плагина не работает Вот как эти вопросы решить? |