Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Как выдать список форм проекта, даже те которые еще не созданы ?   Найти похожие ветки 

 
jiny   (2008-04-03 21:41) [0]

Доброе время суток ув.эскперты и гуру, лень двигатель прогресса , и собственно она поставила передо мной этот вопрос :
делаю проект, состоит из 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 ?


 
DVM ©   (2008-04-03 22:45) [1]


> как мона выдать остальные 37 ?

считай что никак


 
Loginov Dmitry ©   (2008-04-03 22:59) [2]

> все работает, только для себя хотелось бы написать процедуру
> выдачи всех форм проекта


Список форм проекта в Delphi выводится по Shift+F12.


 
Игорь Шевченко ©   (2008-04-03 23:25) [3]


> только для себя хотелось бы написать процедуру выдачи всех
> форм проекта в определенном виде : форма+название->компонент+название
> все бы ничего но из авто-создаваемых 3 формы из 40, причем
> одна из этих 3-х уничтожается при запуске,  поэтому в цикле


У Юрия Зотова есть компонент - разборщик DFM, с его помощью можно решить подобную задачу, разбирая исходные формы


 
Германн ©   (2008-04-04 01:19) [4]


> Игорь Шевченко ©   (03.04.08 23:25) [3]

Но где Юрий? И как достать его компонент?


 
Джо ©   (2008-04-04 03:44) [5]

А что если написать дизайн-тайм эксперт, который при компиляции будет «зашивать» эту информацию в исполнимый модуль?


 
Германн ©   (2008-04-04 03:54) [6]


> Джо ©   (04.04.08 03:44) [5]

А С.Орлик разве не такой написал эсперт?


 
Джо ©   (2008-04-04 04:26) [7]

> [6] Германн ©   (04.04.08 03:54)
>
> > Джо ©   (04.04.08 03:44) [5]
>
> А С.Орлик разве не такой написал эсперт?

Честно, не знаю, не видел и не слышал.


 
Семеныч   (2008-04-04 06:06) [8]

> jiny   (03.04.08 21:41)

> как мона выдать остальные 37?

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

2. Имея класс формы, можно получить список ее published-полей - это и будут лежащие на форме компоненты.


 
jiny   (2008-04-04 08:42) [9]

спасибо за советы, просто хотелось чтобы программа сама находила новые формы и компоненты и записывала в таблицу со всеми объектами программы, дабы админ проги мог просто включить новые опции себе и другим пользователям, видимо придется вручную готовить обновление для таблицы контролов и форм... :(


 
KSergey ©   (2008-04-04 10:18) [10]

> jiny   (04.04.08 08:42) [9]
> спасибо за советы, просто хотелось чтобы программа сама
> находила новые формы ... и записывала в таблицу

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


 
icWasya ©   (2008-04-04 15:41) [11]

Тут нужен не конструктор, а регистрация.
например


type TFormClass = class of TForm;
procedure RegisterForm(F:TFormClass;Comment:String);
begin
 // занесение в таблицу
 //  F.ClassName
 // Comment
 
end;


а в коде каждого модуля с формой добавить примерно такой код

initialization
 RegisterForm(TForm1,"Это первая форма");
end.


 
jiny   (2008-04-05 08:39) [12]

уже решил, задачу, написал процедуру сверки компонент на форме с таблицей объектов программы, даже если хинт компоненты меняется, делаю апдейт названия компоненты. Осталось сделать обратную проверку, есть ли удаленные компоненты ...
Получается, когда форма запускается первый раз у пользователя, onCreate срабатывает процедура сверки объектов и проверке прав на объекты формы.
Я думаю так будет изящней, чем добавлять вручную объекты каждый раз когда будут происходить изменения.



Страницы: 1 вся ветка

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
15-1228308085
Карелин Артем
2008-12-03 15:41
2009.01.25
Справочник или база на миллион и более записей в открытом доступе


15-1228434511
Дмитрий С
2008-12-05 02:48
2009.01.25
Как получить все содержиме IStream


2-1228916838
Alex_C
2008-12-10 16:47
2009.01.25
Зная Handle окна перейти к его TWinControl


1-1207054894
Странник81
2008-04-01 17:01
2009.01.25
А возможно ли?


2-1229333984
abhtr
2008-12-15 12:39
2009.01.25
Проблема с TMemo