Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Список форм приложения / 15 сообщений из 15, страница 1 из 1
29.08.2003, 13:03
    #32251262
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
Добрый день!
Как получить в run-time список всех форм приложения, в том числе и не созданных в данный момент?
...
Рейтинг: 0 / 0
29.08.2003, 13:22
    #32251319
IUnknown_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
Screen.Forms
...
Рейтинг: 0 / 0
29.08.2003, 13:34
    #32251354
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
Screen.Forms - это все формы, отраженные на экране.
А нужен список всех форм приложения, в т.ч. и несозданных.
Хотя бы через vmt/RTTI
...
Рейтинг: 0 / 0
29.08.2003, 13:44
    #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
29.08.2003, 14:18
    #32251468
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
тебе просто названия форм что-ли?
тогда смотришь ресурсы exe-файла, раздел RCDATA
у форм сигнатура 'TPF0'
только зачем тебе это? :)
...
Рейтинг: 0 / 0
29.08.2003, 14:55
    #32251554
DarkCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
2 srf2000
>тогда смотришь ресурсы exe-файла, раздел RCDATA

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

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

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

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

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

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

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

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

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

А что там помнить? Если форма не кастомная, в инициализации юнита написал и все!
Проще не куда!
...
Рейтинг: 0 / 0
01.09.2003, 15:18
    #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
01.09.2003, 15:49
    #32252851
tunknown
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список форм приложения
2 Alex_

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

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

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

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


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