Главная страница
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.5 MB
Время: 0.013 c
3-18745
saviola
2002-01-10 17:03
2002.02.07
Почему не записывает из Table1 в Table2


4-19032
Snake2000
2001-12-10 13:47
2002.02.07
Тройной щелчок


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


3-18762
Olfi
2002-01-12 10:34
2002.02.07
Как округлить число в таблице(TQuery) после деления?


7-18994
CAHEK
2001-10-22 19:00
2002.02.07
Как отобразить окно SysTray в своем приложении