Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизКак определить класс? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c