Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

Как узнать в Run-time имя компонента   Найти похожие ветки 

 
IZVER   (2002-11-04 08:30) [0]

Собственно сабж. Т.е. хочу узнать во время работы программы имя компоненты
Свойство Name не работает. Или в RTTI (если он есть) во время компиляции такая информация не сохраняется ?


 
SPeller   (2002-11-04 16:38) [1]

Кладов уже говорил, что имя в Run-Time не доступно.


 
Quinta   (2003-01-26 14:07) [2]

Надо сделать RegisterClass()
Необходимого класса и Name, ClassName и т.д. прекрасно работают


 
Boguslaw   (2003-01-27 14:05) [3]

What? ;-0


 
Quinta   (2003-01-27 20:08) [4]

to Boguslaw
Это как несогласие понимать что-ли? Может я чего не понял:(. Имелось ввиду регистрация класса которого нет на форме при восстановления скажем из рессурсов.(Ну там для GetClass и ...) А который на форме он и так работает

Name:=(Sender as TControl).Name;


 
SPeller   (2003-01-27 20:11) [5]

Name:=(Sender as TControl).Name;

Цитата из FAQ:

Вопрос : Я вот хочу RTTI пользовать, пишу (MySuper as(is) TSmth) - а меня компилятор ругает - почему?


В KOL нет RTTI, поскольку используется "старая" ООП-модуль (не class, а object). В итоге вместо
MySuper as TSmth пишем PSmth(MySuper), а вместо MySuper is TSmth пишем TSmth.AncestorOfObject(MySuper)


Ответ исчерпывающий.


 
SPeller   (2003-01-27 20:14) [6]

И ещё одна цитата по сабжу:

Вопрос : А где тут в KOL свойсто Name?

Нигде. Его просто нет. Вообще ситуации когда Name нужен настолько редки, что вопрос о его введении в KOL даже не стоит. Нет, небыло и не будет.




 
SPeller   (2003-01-27 20:16) [7]

свой сто Name?

Только сейчас заметил :-)))

Борис или Дмитрий - быстренько исправляемся! )


 
Kladov   (2003-01-27 21:17) [8]

Допустим, вам ну очень нужно иметь Name. Проще говоря, связать с некоторыми объектами строку. Создайте StrListEx, добавьте в него нужные имена, соответствующим "объектам" присвойте указатели на ваши объекты. Хотите получить имя объекта, находите объект (кстати, добавлю объект IndexOfObj, что-то недостает его), получаете имя. Или наоборот, по имени находите через IndexOf( строка ) нужный объект. Сложно?

Ой, скажут иные, сколько ручной работы. И совсем не много. Можно себе процедурку написать при желании, чтобы еще облегчить.

А то все RTTI да RTTI. Не нужен он, RTTI этот.


 
Boguslaw   (2003-01-27 23:45) [9]

In TControl :
property ClassName: String;
Name of window class - unique for every window class in every run session of a program.
;-)
In TObject :
AncestorOfObject function:
function AncestorOfObject( Obj: Pointer ): Boolean;
Is intended to replace "is" operator, which is not applicable to objects.


 
SPeller   (2003-01-28 13:47) [10]

А можно сделать по-другому: описываем допустим вместо фунции NewPanel свою, например MyNewPanel и пишем что-то вроде такого:

function MyNewPanel(...): PControl;
var ClassName: string; p: PChar; l: Integer;
begin
Result := NewPanel(...);
ClassName := "MyClassName_bla-bla-bla";
l := Length( CassName );
p := AllocMem( l + 1 );
Move( p^, ClassName[ 1 ], l ); //точно порядок параметров не помню
p[ l ] := #0;
Result.CustomData := p;
end;


Теперь в CustomData у вас имя класса (точнее типа объекта, классов то у нас нет). За освобождение памяти не стоит беспокоиться - при уничтожении объекта всё освободится.


 
SPeller   (2003-01-28 13:49) [11]

Что-то там не разберёшь, где L, а где 1.

p := AllocMem( L + 1 );
Move( p^, ClassName[ 1 ], L ); //точно порядок параметров не помню
p[ L ] := #0;


 
Kladov   (2003-01-28 18:46) [12]

Неудобно то, что надо делать свою функцию New... , а потом еще не удастся использовать в MCK, если не делать себе компонент, который лег бы на палитру. А слабО сделать компонент, который бросил на форму - и он запомнил в себе список объектов на форме и список их имен, которые они имеют в дизайн-тайм. А потом только обращайся к нему, и все дела. Например NameStorage1.ObjName( Button1 ) вернул бы "Button1". А NameStorage1.SearchObj( "Button1" ) вернул бы указатель Button1.

Для тех, кто не понимает, зачем так сложно, повторю сразу: чтобы не плодить сущности без надобности, и не держать с объектом свойство, которое на самом деле обычно не нужно.


 
SPeller   (2003-01-28 20:54) [13]

Оно то хорошо, а если контролы в ран-тайме создаются? По-моему именно в таких случаях чаще всего нужна подобная информация.


 
new   (2003-02-01 20:01) [14]

sadfsad


 
Kladov   (2003-02-01 21:48) [15]

Я так полагаю, что объект NameStorage должен существовать и в run-time, раз к нему можно в run-time будет обращаться. Почему бы ему не иметь методы, которые позволили бы связать объект с именем динамически. Тем более, что и настройка его должна бы (как и все остальное в MCK) представлять собой код, который генерится в designtime, но выполняется в runtime.

Не забудьте, что объект должен из списка удалятся автоматически, когда разрушается. Сделать это можно легко через Add2AutoFreeEx, который вызовет связующий метод (я бы назвал его Associate, но это на усмотрение).

Кстати, таким способом можно одному объекту давать несколько разных имен, а не только одно. Впрочем, мне и одного обычно не нужно.



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

Форум: "KOL";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-40473
Limp Opo
2003-10-02 14:49
2003.10.13
Скрещевание АвтоКАДА с Дельфи


14-40669
человек
2003-09-23 14:15
2003.10.13
Кадеты. Помогите найти! Я не нашел про них!!! ПОМИРАЮ!!!


1-40393
Olivka
2003-10-02 22:24
2003.10.13
Преобразовать бы pagecontrol


6-40544
SergP
2003-08-13 18:16
2003.10.13
Прокси-Сервер. Как закрыть соединение с браузером.


1-40450
Duncan
2003-10-02 17:20
2003.10.13
контроль версий





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