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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
4-1203283452
Galiaf
2008-02-18 00:24
2009.01.25
Перехват сообщений самодельным окном.


2-1228767885
Platto
2008-12-08 23:24
2009.01.25
TDataSet


2-1228998782
Андрей (Начинающий)
2008-12-11 15:33
2009.01.25
Отслеживание ситемного времени.


10-1152033246
Fran
2006-07-04 21:14
2009.01.25
Падает клиент - COM


2-1229259498
neveGreen
2008-12-14 15:58
2009.01.25
FTP Client





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