Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
1-18872
AndrewK
2002-01-23 09:54
2002.02.07
Как правильно создать и уничтожить форму


4-19016
IgorBIK
2001-12-09 19:28
2002.02.07
Как вывести потоковый звук?


1-18802
olegd
2002-01-24 14:59
2002.02.07
Ресурсы


1-18847
Fareader
2002-01-21 11:43
2002.02.07
TStringList в файл и из файла


3-18710
ЕвгенийА
2002-01-10 01:25
2002.02.07
OpenDialog и Table





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