Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Как определить класс?   Найти похожие ветки 

 
DenK_vrtz ©   (2002-11-01 15:43) [0]

Привет, знатокам!
Воросик вот какого плана. В проекте есть форма, и лежит она в Availabes forms.
Как по имени формы получить имя класса этой формы?
И еще! Почему процедура RegisterClasses, регистрирующая класс, должна быть прописана в секции инициализации в модуле, содержащем, скажем, эту форму?
Пробовал прописать в другом модуле - выдает ошибку!!!

Заранее спасибо!


 
xm   (2002-11-01 16:01) [1]

Как по имени формы получить имя класса этой формы?
метод tobject.classname
Пробовал прописать в другом модуле - выдает ошибку!!!
интересно, какую? только что попробовал - все работает. может ты в uses юнит с формой не прописал?


 
DenK_vrtz ©   (2002-11-01 16:19) [2]

Может я не правильно объяснил?! НО...
Нужно сделать create форме, находящейся в Available forms, из другой формы по ее строковому имени. Отсюда и вопрос, как по имени формы получить имя класса?
А как применить Tobject.classname я что то не понял!!!


 
Peter Gluhiy ©   (2002-11-01 16:47) [3]

Примерно так:

function FindForm(Name: string): TForm;
var
i: Integer;
begin
Result := nil;
for i := 0 to Screen.FormCount-1 do
if AnsiUpperCase(Screen.Forms[i].Name) = AnsiUpperCase(Name) then
begin
Result := TForm(Screen.Forms[i]);
break;
end;
end;

Подходит?


 
Андрей Прокофьев ©   (2002-11-01 16:51) [4]

var xF : TForm;
xF := TForm(FindClass("TMyForm")).Create(Self);
xF.Show;


 
Андрей Прокофьев ©   (2002-11-01 17:00) [5]

Sorry

var
xF : TCustomForm;
begin
xF := TCustomFormClass(FindClass("TForm2")).Create(Self);
xF.Show;


 
reonid ©   (2002-11-01 17:03) [6]

Регистрируй формы вручную.
Почему у тебя RegisterClass не работает в другом модуле -
не знаю. У меня всё работает.

2Андрей Прокофьев © (01.11.02 16:51)
xF := TForm Class(FindClass("TMyForm")).Create(Self);


 
Андрей Прокофьев ©   (2002-11-01 17:06) [7]

2 reonid © (01.11.02 17:03)
:)))


 
reonid ©   (2002-11-01 17:07) [8]

Андрей Прокофьев © (01.11.02 17:06)
:)))


 
DenK_vrtz ©   (2002-11-01 17:10) [9]

Как по имени класса create сделать я знаю!
А как по имени формы?????? Все выше перечисленное - это create по имени класса.
Peter Gluhiy, а Screen не видит формы из Available forms. Проверял!!!!
Так чтоб RegisterClass работал в uses надо имя модуля надо указывать???

Спасибо!


 
Андрей Прокофьев ©   (2002-11-01 17:21) [10]

2 DenK_vrtz © (01.11.02 17:10)
Я перестал что-либо понимать, извините...


 
DieHard ©   (2002-11-01 17:24) [11]

имя_класса_этой_формы:=AForm.ClassName;


 
reonid ©   (2002-11-01 17:24) [12]

DenK_vrtz ©
>А как по имени формы??????

Имя формы, созданной дизайнером форм, отличается от
имени класса всего лишь на одну букву.
Надеюсь, не надо говорить, какую :)))

>Screen не видит формы из Available forms

Только ручная регистрация. Иначе, ИМХО, к именам не созданных
форм не подберёшься.

>Так чтоб RegisterClass работал в uses надо имя модуля надо >указывать???

Да (в имплементэйшн).
А что тебе мешает регистрировать форму в её собственном модуле?


 
KSergey ©   (2002-11-01 17:38) [13]

О, дошло как автору подсказать!
Если форма не создана - нет и ее имени! Вот в чем штука! Есть только класс. Более того, формы одного и того же класса должны будут при одновременном создании иметь разные имена. Чувствуете, к чему я клоню? Нет искомого вами соответствия в принципе.

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


 
DenK_vrtz ©   (2002-11-03 19:17) [14]

Спасибо, Господа, что не оставили мой вопрос без внимания!!!!

2 reonid ©, я отлично понимаю, что имя формы отличается от имени класса всего на одну букву!!! :-)) НО, может есть стандартный метод решения проблемы?

2 KSergey ©, но дело в том, что проект на этапе разработки знает о всех своих формах и их классах!!! Это к тому, что "Если форма не создана - нет и ее имени!" Так откуда эту информацию можно получить, если это возможно?
А задача вот в чем. В таблице хранится имя(не класс!!!) формы, которой нужно сделать create (поле строкового типа), а форма эта находится в Available forms.


 
KSergey ©   (2002-11-04 05:49) [15]

> DenK_vrtz © (03.11.02 19:17)
> 2 KSergey ©, но дело в том, что проект на этапе разработки
> знает о всех своих формах и их классах!!! Это к тому, что
> "Если форма не создана - нет и ее имени!" Так откуда эту
> информацию можно получить, если это возможно?

Занятный вы человек: дельфи располагает всей информацией о проекте, вот в чем штука. И это естественно. Тем более, что вы сами же ручками имя форме и присваиваете. А это все в DFM хранится. Таким образом можно конечно пойти через задний проход и перевормулировать вопрос "а как определить класс формы, которыя после создания будет иметь такое то имя"; возможно покопавшись в ресурсах своего приложения вы это и найдете, но стоит ли оно того и правильно ли это?!

> А задача вот в чем. В таблице хранится имя(не класс!!!)
> формы, которой нужно сделать create (поле строкового типа),
> а форма эта находится в Available forms.

Не буду претендовать на наилучший метод, но делаю такое так: объявляется перечисление с необходимыми классами форм, которые я хочу создавать, а в БД хранится индекс в этом перечислении.
Под руками исходника нет, если что - нпишите письмо - пришлю как это определяется, впрочем это не сложно.


 
DenK_vrtz ©   (2002-11-04 08:14) [16]

Всем огромное спасибо! :-)



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
8-46000
katamaran
2002-07-25 12:15
2002.11.14
Помогите с фоном на форме.


14-46151
Ajax
2002-10-27 20:43
2002.11.14
CD-ROM versus CD-RW


1-45819
Mad_Ghost
2002-11-04 15:08
2002.11.14
Delphi & Excel


4-46207
valerchik
2002-10-03 00:47
2002.11.14
Как перерисовать окно...


3-45767
Fishka
2002-10-25 13:11
2002.11.14
Директория для временных файлов _SQL....dbf