![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как идентифицировать объект по указателю на него ? [D6]
msguns © (2005-07-22 15:20:00)На простом примере :
Есть процедура, которой передается указатель, куда надо положить некое число. Она должна определить, что "скрывается" под этим указателем. Если, например, это обект винкотрольный, то преобразовать число в строку и положить в св-во Text или Caption (в зависимомти от класса объекта), если строка - то просто положить туда. Если же Integer, то просто записать по этому адресу само число и т.д.
Благодарю всех участников.
evvcom (2005-07-22 16:24:00) [21]Посмотри как работают функции New/Dispose с TypInfo.
Джо (2005-07-22 16:21:00) [22]
> [7] msguns © (22.07.05 16:04)
> Меня интересует грамотно.
> И красиво ;)
Для этого лучше всего грамотно подойти к проектированию алгоритма. Тогда и не будет нужды в хаках.
Digitman (2005-07-22 16:20:00) [23]
> msguns © (22.07.05 16:04) [7]
тогда грамотно же и излагай суть вопроса.
> передается указатель
типизированный ? упоминай тип.
нетипизированный ? см. [1]
msguns (2005-07-22 16:04:00) [24]>Digitman © (22.07.05 15:53) [6]
>а тебя хак-методы интересуют ?)
Меня интересует грамотно.
И красиво ;)
Digitman (2005-07-22 15:53:00) [25]
> msguns © (22.07.05 15:49) [5]
а тебя хак-методы интересуют ?)
msguns (2005-07-22 15:49:00) [26]>Digitman © (22.07.05 15:35) [2]
Ну, до метода научного тыка я бы и сам догадался ;))
Digitman (2005-07-22 15:47:00) [27]
> Lamer@fools.ua © (22.07.05 15:44) [3]
теже фаберже, но вид сбоку
Lamer@fools.ua (2005-07-22 15:44:00) [28]> Как идентифицировать объект по указателю на него ?
Либо пользоваться Variant'ами либо использовать технологии с поддержкой определения типа в ран-тайм (.NET, Java).
Digitman (2005-07-22 15:35:00) [29]procedure (ptr: Pointer; Number: Integer);
begin
try
if TObject(ptr) is TSomeControl then
begin
TSomeControl(ptr).Text := IntToStr(Number);
Exit;
end;
except
end;
try
if TObject(ptr) is TSomeOtherControl then
begin
TSomeOtherControl(ptr).Text := IntToStr(Number);
Exit;
end;
except
end;
try
if строка then
просто положить туда (черт-те что подразумевается под "строка" и "просто положить туда")
except
end;
PInteger(ptr)^ := Number;
end;
Джо (2005-07-22 15:21:00) [30]В общем случае, имхо, никак.