Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-45919
NONAME00
2002-11-02 23:53
2002.11.14
HLP


14-46137
Beginner-Designer
2002-10-28 11:40
2002.11.14
как устанавливать программы в Linux?


3-45665
NightCon
2002-10-24 07:09
2002.11.14
БД не работает по сети


1-45800
Sectey
2002-11-04 17:42
2002.11.14
Доступ к файлу.


1-45957
fame
2002-11-04 13:52
2002.11.14
Фиксирование столбцов в DBGrid





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