Форум: "Основная";
Текущий архив: 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???
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c