powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Список форм приложения
15 сообщений из 15, страница 1 из 1
Список форм приложения
    #32251262
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Как получить в run-time список всех форм приложения, в том числе и не созданных в данный момент?
...
Рейтинг: 0 / 0
Список форм приложения
    #32251319
IUnknown_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Screen.Forms
...
Рейтинг: 0 / 0
Список форм приложения
    #32251354
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Screen.Forms - это все формы, отраженные на экране.
А нужен список всех форм приложения, в т.ч. и несозданных.
Хотя бы через vmt/RTTI
...
Рейтинг: 0 / 0
Список форм приложения
    #32251374
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Что значит "несозданные"?
Если форма не создана, то ее нету и никак ты ее не получишь!

Можно получить список классов форм.
Для этого надо регистрировать классы, а потом искать их!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
unit ...;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms...

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  aForm: TForm1;

implementation

{$R *.dfm}


initialization
 RegisterClass(TForm1);

end.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  vClass: TPersistentClass;
  myF: TForm1;
begin
  vClass := FindClass(AFormClassName);
  if Assigned(vClass) then
  begin
    if vClass.InheritsFrom(TForm) then
    begin
      myF := TFormClass(vClass).Create(Application);
      ...
    end;
  end;
end;

...
Рейтинг: 0 / 0
Список форм приложения
    #32251468
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тебе просто названия форм что-ли?
тогда смотришь ресурсы exe-файла, раздел RCDATA
у форм сигнатура 'TPF0'
только зачем тебе это? :)
...
Рейтинг: 0 / 0
Список форм приложения
    #32251554
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 srf2000
>тогда смотришь ресурсы exe-файла, раздел RCDATA

А как это делается в рантайме?
...
Рейтинг: 0 / 0
Список форм приложения
    #32251634
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM LoadLibraryEx и флаг LOAD_LIBRARY_AS_DATAFILE
...
Рейтинг: 0 / 0
Список форм приложения
    #32251636
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
формат dfm смотреть тут:
http://giscenter.icc.ru:8082/scripts/WWWBinV.dll/ShowR?DFM.RFH
правда старый кажись...
...
Рейтинг: 0 / 0
Список форм приложения
    #32252335
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы!

RegisterClass(TForm1); это хорошо, но не достаточно

поясню, зачем это нужно...

есть приложение, которое состоит из сдоканных форм, информация о которых храниться в базе, название классов естественно в текстовом виде

формы могут добавляться в приложение, а помнить дописывать регистеркласс в определённое место не хочется.

да и зачем регистрировать, если это как-то можно получить, хотя искать 'TPF0' это слишком прямлоинейно:-)

вот я и подумал, что раз существует для каждой формы/юнита? таблица vmt/rtti, то можно попробовать их получить внутренними способами

ведь достаточно получить адрес одной формы, например главной(так и быть я её не просто зарегистрирую, но даже она будет создана), и получить по ней главную vmt/rtti таблицу(если такая существует), по которой потом можно проехаться и получить всё что нужно. Вот только как это сделать?

или я не прав?
...
Рейтинг: 0 / 0
Список форм приложения
    #32252451
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой Delphi? начиная с 6 вроде есть TClassFinder....
у меня 5 :) не могу проверить
...
Рейтинг: 0 / 0
Список форм приложения
    #32252488
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a без RegisterClass не обойтись все равно IMHO...
...
Рейтинг: 0 / 0
Список форм приложения
    #32252707
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
>> формы могут добавляться в приложение, а помнить дописывать регистеркласс в определённое место не хочется.

А что там помнить? Если форма не кастомная, в инициализации юнита написал и все!
Проще не куда!
...
Рейтинг: 0 / 0
Список форм приложения
    #32252791
Alex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так не подойдет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 procedure TMainF.FormLoader (FormClassType: TFormClass; var FormName;BtnCap:String);
var MyMItem:TMyMenuItem;
begin
if TForm(FormName) = nil then begin
Application.CreateForm (FormClassType, FormName);
   MyMItem:=TMyMenuItem.Create(N24);
   MyMItem.FormName:=TForm(FormName);
   MyMItem.Caption:=BtnCap;
   MyMItem.OnClick:=OpenFormItemClick;
   N24.Add(MyMItem);
end else begin
TForm(FormName).BringToFront;
TForm(FormName).WindowState := wsNormal;
end;
end;


информация о формах находится в Menu
...
Рейтинг: 0 / 0
Список форм приложения
    #32252851
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alex_

это следующий шаг:-)
вопрос пока в получении TFormClass по 'TFormClass'

видимо RegisterClass неизбежен, либо руками искать главную таблицу vmt, если она вообще существует

так же жаль, что нельзя узнать всех незарегистрированных наследников класса, хотя бы зарегистрированного.
...
Рейтинг: 0 / 0
Список форм приложения
    #32253090
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем предку знать о наследниках? Если идёт вызов виртуального метода, то перед каждым объектом стоит ссылка на его таблицу виртуальных адресов. В остальном же это потомку нужно знать о предке, чтобы inherited вызывать.

Что же касается самого вопроса, то таблицы для всех классов существуют, также как и существуют функции слассов, та же ClassName, которые не зависят от того, создан хотя бы один объект класса или нет. Попробуй посмотреть на этот счёт файл system.pas в исходниках Delphi.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Список форм приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]