Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 17:23   #31
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я слышал что для Делфи есть такие эксперты, но никогда их не видел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2010, 17:43   #32
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
Из всего написанного лично мне становится ясно, что разрабатывать модульное приложение лучше и удобнее всего с использованием подключаемых пакетов.
Верно, но вы не сможете использовать другие языки. Также обновление такого приложения может быть кошмаром (некоторые изменения приведут к необходимости перекомпиляции всех пакетов).

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
напр. у меня установлены JEDI-компоненты и при компиляции выскакиваю ошибки, типа "не найден пакет такой-то" или "пакет такой-то не является run-time-пакетом"
Первое - это явно какая-то ошибка установки пакетов. Типа того же PATH.

Второе - просто уберите из строчки все design-time пакеты. Часто их можно отличить по заглавной D в имени пакета (откуда они там вообще взялись?).

Ну и тогда утилита, которую вы ищете, будет не нужна: просто указываются все пакеты в строчке. Какие вы используете - с теми и будете слинкованы. Не используете - ссылок на пакет не будет.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2010, 17:51   #33
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Цитата:
Из всего написанного лично мне становится ясно, что разрабатывать модульное приложение лучше и удобнее всего с использованием подключаемых пакетов.
Так категорично утверждать тоже не нужно, с пакетами тоже могут быть проблемы, о которых предыдущий оратор упоминал. При необходимости, рассмотри возможность создания плагинов с использованием COM или "голых" интерфейсов, потому что на самом деле не так страшен черт...
Ins вне форума Ответить с цитированием
Старый 13.08.2010, 09:27   #34
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Верно, но вы не сможете использовать другие языки. Также обновление такого приложения может быть кошмаром (некоторые изменения приведут к необходимости перекомпиляции всех пакетов).
Согласен, но привязка к языку в моём случае это не проблема, а скорее даже плюс. И на счёт внесения изменений я не особенно беспокоюсь, так как планирую использовать интерфейсы.

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Первое - это явно какая-то ошибка установки пакетов. Типа того же PATH.

Второе - просто уберите из строчки все design-time пакеты. Часто их можно отличить по заглавной D в имени пакета (откуда они там вообще взялись?).

Ну и тогда утилита, которую вы ищете, будет не нужна: просто указываются все пакеты в строчке. Какие вы используете - с теми и будете слинкованы. Не используете - ссылок на пакет не будет.
Это именно какая-то непонятная ошибка ошибка, и именно так я сейчас и делаю - в каждом новом проекте вручную изменяю список подключаемых пакетов. Что бы этого избежать - требуется утилита.
Круг замкнулся
Но это уже высший пилотаж и пока терпит.

Думаю, что стоит уже описать то, вокруг чего идёт обсуждение.

Я пишу что-то вроде системы управления предприятием. Не спрашивайте меня, почему я его пишу с нуля, а не взял какое-нибудь готовое решение - ответ не прост. Так уж вышло. Итак, возникла задача так построить разработку программного обеспечения в нашей конторе, что бы можно было дописывать какие-то новые части и переделывать старые. Причём обновлять части необходимо без отрыва от производства.
Я перепробовал кучу различныз вариантов (обновление всего экзешника, MDI в dll-ках, встраивание HTML и Flash в страницы). Причём каждый раз натыкался на какую-нибуль непреодолимую проблему или потерю удобства разработки.
А недавно наткнулся на статью в Королевстве Delphi о плагинах, на основании которой решил попробовать реализовать поставленную задачу.
Вот эта статья

Во вложении программка (App.zip App.zip), которая может дать представление о конечной цели обсуждения. Похожа на любой современный браузер - вверху панель вкладок для управления страницами загружаемыми из пакетов. Один пакет - одна страничная форма. Естественно, скомпилирована программа без пакетов и тестовые формы встроены в приложение. Иначе на данном этапе разработки программуля эта запускалась бы только на моём компе. Для загрузки страниц выбираем пункт главного меню "Вид" и выбираем одну из двух тестовых форм. Можно загружать по несколько экземпляров одной и той же страницы.

Планируется, что пакеты со страницами будут выкладываться в специально отведённом хранилище (напр. БД или веб-сервер), а при загрузке программы будут проверяться версии хранимых пакетов со страницами. При желании пользователи смогут обновить пакет или пользоваться старым. Естественно, каждая страница будет иметь доступ к БД через стандартный интерфейс.

Если вдруг кому-нибудь это покажется интересным или полезным ( ну мало ли ) - "милости прошу к нашему шалашу".

На данном этапе столкнулся с такой задачей. Предположим, пользователь решил обновить пакет N. Но в настоящий момент этот пакет загружен и созданы несколько экземпляров его класса страницы. Следовательно, перед обновлением этот пакет надо выгрузить, а перед выгрузкой закрыть и освободить все его страницы (назовём их так). Я пока не гуглил и не проводил исследования, но может у кого есть идея, как освободить все созданные экземпляры классов выгружаемого пакета. Причём мне кажется, что проще всего это будет сделать, если удасться написать функцию, которая по ссылке на экземпляр класса вернёт имя (или хэндл) пакета, в котором этот класс был описан/создан.

Последний раз редактировалось Stilet; 13.08.2010 в 09:42.
Greek9000 вне форума Ответить с цитированием
Старый 13.08.2010, 09:52   #35
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ответ не прост.
Наоборот. АСУ предприятий нельзя брать чужое, все равно придется подстраивать его под стандарты предприятия, так что проще написать свою с уже учтенными в ядре стандартами.

Вопрос у меня созрел: Насколько мне известно на предприятиях не очень то приветствуется разнобой в ПО. Наоборот начальники все мечтают стандартизировать работы отделов до такой степени чтоб на любом компьютере любой человек работал с одним и тем же набором инструментов, иначе могут возникнуть казусы. Индивидуальные плагины оправданы только если на предприятии у каждого персоналка есть и то бабушка надвое сказала.т.е. если вышло что-то новое то полюбом всем им пользоваться а не только избранным.
Все специалисты с которыми я общался в один голос заявляют что с плагинами морочится, так уж проще открыть исходники программы, доработать ее и выдать как единую, а не писать очередной гаджет. Может проще будет дорабатывать программу без использования плагинов?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.08.2010, 10:29   #36
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вопрос у меня созрел: Насколько мне известно на предприятиях не очень то приветствуется разнобой в ПО. Наоборот начальники все мечтают стандартизировать работы отделов до такой степени чтоб на любом компьютере любой человек работал с одним и тем же набором инструментов, иначе могут возникнуть казусы. Индивидуальные плагины оправданы только если на предприятии у каждого персоналка есть и то бабушка надвое сказала.т.е. если вышло что-то новое то полюбом всем им пользоваться а не только избранным.
Все специалисты с которыми я общался в один голос заявляют что с плагинами морочится, так уж проще открыть исходники программы, доработать ее и выдать как единую, а не писать очередной гаджет. Может проще будет дорабатывать программу без использования плагинов?
Отвечаю. На счёт разделения прав доступа к страницам внутри разных подразделений - это уже пройденный этап. Имеется рабочий прототип в котором реализовано разделение прав доступа к страницам вплоть до пользователя.

А на счёт изменения исходного кода и обновления программы в рабочее время - могу Вас заверить, что (по крайней мере в моём случае) лучше потратить один раз время на заморочки с плагинами, чем раз в 2-4 недели сначала дописывать программу, которая потихоньку превращается в один большой клубок побыстрому наляпаных заплаток, после чего её ещё надо обновить у конечных пользователей.

Но и это ещё не всё. В дальнейшем планируется внедрение какой-то части нашего ПО у удалённых клиентов. Тут уже с обновлениями не набегаешься. Плодить версии тоже не вариант.

Так что, как ни старался я пойти по пути наименьшего сопротивления - не получилось...
Greek9000 вне форума Ответить с цитированием
Старый 13.08.2010, 10:34   #37
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
в каждом новом проекте вручную изменяю список подключаемых пакетов. Что бы этого избежать - требуется утилита.
Ну так вы сделайте это один раз для проекта по-умолчанию. Закройте все проекты, откройте опции, подправьте пакеты, сохраните. Теперь каждый новый проект будет иметь верные настройки. И если удалить конфигурацию уже существующего проекта, то он при открытии тоже получит конфигурацию по-умолчанию.

Я не думаю, что вы найдёте утилитку - уж больно задача специфическая.

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
И на счёт внесения изменений я не особенно беспокоюсь, так как планирую использовать интерфейсы.
Вот это правильно.

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
А недавно наткнулся на статью в Королевстве Delphi о плагинах, на основании которой решил попробовать реализовать поставленную задачу.
Вот эта статья
Возможно, вам будет также интересно почитать этот цикл. Хотя до готовых плагинов там дело не дошло, пока там просто ныряние в BPL.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 13.08.2010 в 10:39.
GunSmoker вне форума Ответить с цитированием
Старый 13.08.2010, 13:50   #38
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
На данном этапе столкнулся с такой задачей. Предположим, пользователь решил обновить пакет N. Но в настоящий момент этот пакет загружен и созданы несколько экземпляров его класса страницы. Следовательно, перед обновлением этот пакет надо выгрузить, а перед выгрузкой закрыть и освободить все его страницы (назовём их так). Я пока не гуглил и не проводил исследования, но может у кого есть идея, как освободить все созданные экземпляры классов выгружаемого пакета. Причём мне кажется, что проще всего это будет сделать, если удасться написать функцию, которая по ссылке на экземпляр класса вернёт имя (или хэндл) пакета, в котором этот класс был описан/создан.
Господа! Вопрос остался актуальным. Как правильно выгрузить пакет, точнее, как освободить все экземпляры классов, описанных в данном пакете? Применительно к моему случаю - как перед вызовом UnloadPackage закрыть и освободить все экземпляры класса формы, описанного в требуемом пакете? Трёхчасовые поиски результатов не дали. Намекните, плз, где искать.
Greek9000 вне форума Ответить с цитированием
Старый 13.08.2010, 13:56   #39
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

В секции Finalization любого юнита пакета напиши MyForm.Free и все дела. Если в пакете количество однотипных экземпляров формы несколько - заноси при создании их в TObjectList (юнит contnrs.pas) с OwnObject = True и в секции Finalization убивай этот список. UnloadPackage вызывает код из секции финализации юнитов пакета
Ins вне форума Ответить с цитированием
Старый 13.08.2010, 13:56   #40
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
акрыть и освободить все экземпляры класса формы,
Код:
for j:=screen.forms.count-1 downto 0 do
   if screen.forms[j].classtype=<myformclass> then
      screen.forms[j].Close;
такого будет достаточно?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Runtime runtime = Runtime.getRuntime(); Pti44ka Общие вопросы по Java, Java SE, Kotlin 1 22.11.2009 10:45
без запроса Package? koleko Общие вопросы Delphi 2 18.02.2009 22:59
RunTime Error713 (VB) vio Помощь студентам 2 12.12.2008 20:45
Unit 'MyLib' implicitly imported into package 'MyPackage'. как исправить? SkAndrew Компоненты Delphi 0 06.04.2008 00:28
Runtime programming JoanM Общие вопросы Delphi 4 09.01.2008 11:00