Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

Как получить список ещё не созданных форм в 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???




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.022 c
1-18859           NLO                   2002-01-15 08:15  2002.02.07  
где взять Image для просмотра TIFF и PCX


1-18798           Filat                 2002-01-16 20:42  2002.02.07  
Версии Word 97 и 2000. Почему не получаются отчёты?


4-19030           Hair_Fly              2001-12-11 17:55  2002.02.07  
Как мне запустить из своего сервиса некоторое приложение ?


1-18879           KIR                   2002-01-22 12:04  2002.02.07  
Раскраска строк грида в нестандартные цвета?


3-18699           Jan                   2002-01-09 14:40  2002.02.07  
Файл *.qrp