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

Вниз

Как получить список ещё не созданных форм в Run Time?   Найти похожие ветки 

 
mapnn   (2002-01-19 15:16) [0]

Как получить список ещё не созданных форм в Run Time?
Список AutoCreate Forms легко получить из Screen.Forms[]
а как здесь быть - в исходниках VCL ничего не нащёл :( ?


 
mapnn   (2002-01-21 20:29) [1]

Ответов не дождался. Мастера! Ау!!! Borland Community тоже молчит как рыба :-) Отвечаю сам себе: придётся создать список ручками :-) ... и помочь Run Time..у его увидеть :-))


 
AlexR_R   (2002-01-21 22:06) [2]

А разве в Screen.Forms[] не все формы включены?
(Которые уже на данном этапе созданы)


 
mapnn   (2002-01-21 23:55) [3]

Вот именно "Которые уже на данном этапе созданы" , то есть те,
которые в проекте находятся в списке "Auto-greate forms", или
созданы "вручную" и живут, а меня интересует доступ с списку "Avialable forms" - то есть, к списку ещё не созданных форм. По идее, нужен доступ к списку модулей приложения, а оттуда можно получить и информацию о заданных в проекте TComponentForm, то есть списку объявленных классов форм, ссылки на которые объявлены, но пока равны nil. Вот в чём загвоздка. Проблему
можно решить по разному, но всё-таки?


 
AlexR_R   (2002-01-22 14:51) [4]

Я думаю список "Avialable forms" есть лишь в дизайн тайме,
а для Application тебе надо его создавать самому.
Легче ручками запонить или парсируя файл проекта.
Но это еще не все "Avialable forms", которые могут быть. Есть
еще и dll. И хрен знает как подключенные модули.
А списка модулей приложения насколько я знаю не существует.


 
Digitman   (2002-01-22 15:13) [5]

никакой связи между design-time-списком "AutoCreate Forms" и св-вами/методами run-time-объекта Application нет. совершенно разные вещи, никакого отношения друг-к-другу не имеющие


 
gek   (2002-01-22 15:44) [6]

>> Digitman
Верно батенька.
>> Как получить список ещё не созданных форм в Run Time?
Никак. Если только не создать список созданных форм.


 
Digitman   (2002-01-22 15:50) [7]

>gek
Вот спасибо ! А то я ляпнул, с потолка типа, а потом засомневался)))))))


 
Юрий Зотов   (2002-01-22 16:00) [8]

> А списка модулей приложения насколько я знаю не существует.

В design-time, естественно, существует все (см. Open Tools API - в частности, списки модулей, форм и еще многое можно достать через переменную ToolServices).

А в run-time, естественно, ничего этого не существует (да ведь и самих модулей уже не существует - они вошли в EXE). И поэтому все придется делать ручками.

Например, в секции Initialization первого загружаемого модуля можно создать TList и в нем "зарегистрировать" все, что требуется.


 
Макс Черных   (2002-01-22 22:49) [9]

2 AlexR_R & Юрий Зотов
> А списка модулей приложения насколько я знаю не существует
> В design-time, естественно, существует все
> А в run-time, естественно, ничего этого не существует
А вот и заблуждаетесь, Господа. В ресурсе PACKAGEINFO
зашит список всех модулей, в том числе и неявно подключенных.
У меня правда под рукой нет алгоритма его чтения, но
в интернете его уж точно можно найти. Для примера, программа
Resource Builder без проблем его показывает.

По поводу списка форм. Список классов можно получить очень просто. Перебираем через EnumResourceNames ресурсы с типом
RCDATA. Для формы, как известно, имя ресурса совпадает с
именем класса, далее через GetClass получаем TPersistentClass
и смотрим if этот TPersistentClass Is TForm.

А вот как получить список глобальных переменных типа:
Form1: TForm1 я не знаю, так как НЕТ такого,
как впрочем мне непонятно зачем все это надо?




 
mapnn   (2002-01-23 01:02) [10]

Всем спасибо за дискуссию!
Что касается, "зачем это надо?" - например для
блокировки интерфейса программы, в зависимости от текущего
профиля пользователя в системах "клиент-сервер". Вы создаёте
на клиенте класс TUserProfile, объект который читает с сервера
текущий профиль пользователя и настраивант "по месту" каждую
вызываемую юзверем форму. Конечно формы можно заранее занести в список и его использовать .... но если вы добавите новую форму
в проект - надо каждый раз править список - это кривовато :-))
.........



 
Digitman   (2002-01-23 11:34) [11]

>Макс Черных
Браво !! Слона я и не приметил) ..... действительно, это можно "достать" из ресурсов

>mapnn
Клиентское приложение и так знает обо всех классах форм. Можно же в некоем заранее определенном тобой общем событии всех разработанных форм предусмотреть логику обращения к некоему упомянотому тобой экземпляру класса TUserProfile, прочитать из него необходимые данные и настроить форму в соответствии с профилем перед тем как она будет визуализирована.


 
mapnn   (2002-01-23 12:57) [12]

> Digitmap

Я собственно так и делаю, проблема мной слегка надумана,
но обсосать это было полезно (Слоны, например появились :-))


 
Digitman   (2002-01-23 13:41) [13]

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


 
yaJohn   (2002-01-23 15:11) [14]

Sushestvuet RegisterClass i UnRegisterClass. Sootvetstvenno, gdeto est struktura gde hranitsia informacia o zaregestrirovannih klassah. Formi odnoznachno zaregestrirovani.
classes.pas
...
implementation

uses Consts, TypInfo;

const
FilerSignature: array[1..4] of Char = "TPF0";

var
ClassList: TThreadList;
....

Itak, kak dostat" ClassList, vernee k ClassList.LockList? V smisle kak poluchit ego element ne zakonno, po ClassName, a po indexu???



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

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

Наверх




Память: 0.51 MB
Время: 0.012 c
3-18756
dymka
2002-01-10 17:23
2002.02.07
Можно ли использовать TQuery без TDatabase?


1-18832
vlv
2002-01-21 21:07
2002.02.07
Количество значений в наборе


3-18693
HydraMarat
2002-01-08 23:21
2002.02.07
Поиск через SQL


1-18899
Muskat
2002-01-22 22:57
2002.02.07
Вопросик есть!


3-18727
saviola
2002-01-10 13:28
2002.02.07
Как удалить запись из таблицы, типа нажатие на минус в DBNavigator