![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выдать список форм проекта, даже те которые еще не созданы ? [D7, WinXP]
jiny © (2008-04-03 21:41:00)Доброе время суток ув.эскперты и гуру, лень двигатель прогресса , и собственно она поставила передо мной этот вопрос :
делаю проект, состоит из 40 форм, компонентов, соответственно тоже много в конце проекта сделал распредение прав пользователей, все работает, только для себя хотелось бы написать процедуру выдачи всех форм проекта в определенном виде : форма+название->компонент+название
все бы ничего но из авто-создаваемых 3 формы из 40, причем одна из этих 3-х уничтожается при запуске, поэтому в цикле
procedure GetMyFormList;
var iForms,iControls: integer;
begin
For iForms:=0 to Application.ComponentCount-1 do
begin
ListBox1.Items.Add(Application.Components[iforms].Name+' : '+Application.Components[iforms].ClassName)
end;
выдаются те формы, которые созданы в RunTime
как мона выдать остальные 37 ?
jiny (2008-04-05 08:39:00) [1]уже решил, задачу, написал процедуру сверки компонент на форме с таблицей объектов программы, даже если хинт компоненты меняется, делаю апдейт названия компоненты. Осталось сделать обратную проверку, есть ли удаленные компоненты ...
Получается, когда форма запускается первый раз у пользователя, onCreate срабатывает процедура сверки объектов и проверке прав на объекты формы.
Я думаю так будет изящней, чем добавлять вручную объекты каждый раз когда будут происходить изменения.
icWasya (2008-04-04 15:41:00) [2]Тут нужен не конструктор, а регистрация.
например
type TFormClass = class of TForm;
procedure RegisterForm(F:TFormClass;Comment:String);
begin
// занесение в таблицу
// F.ClassName
// Comment
end;
а в коде каждого модуля с формой добавить примерно такой код
initialization
RegisterForm(TForm1,"Это первая форма");
end.
KSergey (2008-04-04 10:18:00) [3]> jiny (04.04.08 08:42) [9]
> спасибо за советы, просто хотелось чтобы программа сама
> находила новые формы ... и записывала в таблицу
Тогад можно пронаследовать все формы от отного предка (не обязательно визуально в данном случае) и в перекрытом конструкторе предка (или где-то еще) сделать это. Правда, получится лишняя нагрузка при каждом создании формы у каждого пользователя.... но можно этот процесс отключать, выполняя данный код по определенному ключику в строке запуска екзешника, т.к. процедура, понятно, нужна только один раз для каждой новой версии.
Не забыть так же решить задачу "исчезновения" некоторых элементов формы в новых версиях.
jiny (2008-04-04 08:42:00) [4]спасибо за советы, просто хотелось чтобы программа сама находила новые формы и компоненты и записывала в таблицу со всеми объектами программы, дабы админ проги мог просто включить новые опции себе и другим пользователям, видимо придется вручную готовить обновление для таблицы контролов и форм... :(
Семеныч (2008-04-04 06:06:00) [5]> jiny (03.04.08 21:41)
> как мона выдать остальные 37?
1. Если форма не создана, ее самунельзя выдать никак (раз ее нет, то и выдавать нечего). Но классывсех форм проекта выдать можно, достаточно завести глобальный список таких классов и в секции инициализации модуля каждой формы написать одну строчку - внесение класса этой формы в список.
2. Имея классформы, можно получить список ее published-полей - это и будут лежащие на форме компоненты.
Джо (2008-04-04 04:26:00) [6]> [6] Германн © (04.04.08 03:54)
>
> > Джо © (04.04.08 03:44) [5]
>
> А С.Орлик разве не такой написал эсперт?
Честно, не знаю, не видел и не слышал.
Германн (2008-04-04 03:54:00) [7]
> Джо © (04.04.08 03:44) [5]
А С.Орлик разве не такой написал эсперт?
Джо (2008-04-04 03:44:00) [8]А что если написать дизайн-тайм эксперт, который при компиляции будет «зашивать» эту информацию в исполнимый модуль?
Германн (2008-04-04 01:19:00) [9]
> Игорь Шевченко © (03.04.08 23:25) [3]
Но где Юрий? И как достать его компонент?
Игорь Шевченко (2008-04-03 23:25:00) [10]
> только для себя хотелось бы написать процедуру выдачи всех
> форм проекта в определенном виде : форма+название->компонент+название
> все бы ничего но из авто-создаваемых 3 формы из 40, причем
> одна из этих 3-х уничтожается при запуске, поэтому в цикле
У Юрия Зотова есть компонент - разборщик DFM, с его помощью можно решить подобную задачу, разбирая исходные формы
Loginov Dmitry (2008-04-03 22:59:00) [11]> все работает, только для себя хотелось бы написать процедуру
> выдачи всех форм проекта
Список форм проекта в Delphi выводится по Shift+F12.
DVM (2008-04-03 22:45:00) [12]
> как мона выдать остальные 37 ?
считай что никак