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

Вниз

Для чего свойство Tag   Найти похожие ветки 

 
Al1   (2004-11-23 21:14) [0]

У многих компонент есть свойство Tag. Для чего оно?
Могу ли я в нем например держать указатель на какойто обьект?


 
begin...end ©   (2004-11-23 21:17) [1]


> Al1   (23.11.04 21:14)


> Могу ли я в нем например держать указатель на какойто обьект?

Можете.

А вот и отрывок из справки:

Tag property (TComponent)

Tag has no predefined meaning. The Tag property is provided for the convenience of developers. It can be used for storing an additional integer value or it can be typecast to any 32-bit value such as a component reference or a pointer.


 
Al1   (2004-11-23 21:20) [2]


> Tag has no predefined meaning. The Tag property is provided
> for the convenience of developers

А можно по русски? Спасибо.


 
SergP ©   (2004-11-23 21:22) [3]

В принципе уже ответили. Но если непонятно "не по нашему", то могу сказать что сабжевое свойство не используется самим объектом и предназначено исключительно для пользователя, чтобы он хранить там свои данные при необходимости.


 
Al1   (2004-11-23 21:24) [4]

Большое спасибо.


 
begin...end ©   (2004-11-23 21:25) [5]


> [2] Al1   (23.11.04 21:20)

Tag не имеет предопределённого значения. Свойство Tag предназначено для удобства разработчиков. Оно может быть использовано для хранения дополнительного целого значения, или может быть приведено к любому 32-битному значению, такому, как ссылка на компонент или указатель.

На будущее: http://www.translate.ru


 
KSergey ©   (2004-11-24 10:27) [6]

> [5] begin...end ©   (23.11.04 21:25)
> Tag не имеет предопределённого значения

По-моему, это не совсем корректно (не по отношению к оригиналу, а по сути).
Я бы сказал

"Tag не имеет предопределённого назначения"

т.к. изначальное значение (а именно так я понимаю "предопределенное") оно как раз имеет как и любое поле объекта - 0.


 
TUser ©   (2004-11-24 10:45) [7]

По поводу указателей - надо быть осторожнее. Один из 2х глюков Delphi про которые я знаю связан именно с хранением указателей в св-ве Tag


 
Sandman25 ©   (2004-11-24 10:48) [8]

[7] TUser ©   (24.11.04 10:45)

Поподробнее можно?


 
TUser ©   (2004-11-24 10:59) [9]

Создавались динамически кнопки, по клику на них надо было делать нечто. Исходная информация для этого нечто хранилась где-то в памяти, на нее был указатель. Писал в св-во Tag этот указатель, но в обработчике события TMyType(Tag) указывал куда-то совершенно не туда куда надо, а в какое-то совершенно другое место в памяти, где вместо нужных мне данных лежало что-то другое. Получалось AV.

То, что с указателями я все сделал правильно - зуб даю. В других местах проекта никаких проблем при работе с этими данными не было. Если написать указатель не в Tag, а в Hint:=inttostr(), то в обработчике получался правильный указатель. Так что проблема именно с Tag"ом была.

В чем эта проблема состоит - здесь обсуждали, но так ни до чего недообсуждались. Решил дело написанием своего наследника от TButton, куда добавил св-во - указатель, который надо было хранить. Заработало.


 
Sandman25 ©   (2004-11-24 11:08) [10]

[9] TUser ©   (24.11.04 10:59)

По-моему, это проблема не с Tag. Во всяком случае, если судить по    
property Tag: Longint read FTag write FTag default 0;
private    FTag: Longint;
и
mov [ebx+$0c], given_tag_value,
в которую транслируется
Tag := given_tag_value;

Интересно было бы найти ту ветку, попробую поискать.


 
Leonid Troyanovsky   (2004-11-24 11:11) [11]


> Al1   (23.11.04 21:14)  
> У многих компонент есть свойство Tag. Для чего оно?
> Могу ли я в нем например держать указатель на какойто обьект?


> Создаётся runtime меню и генерятся его элементы. Hехочется для каждого
> item"a создавать обработчик onClick. Так вот, как правильно сделать, чтоб
> при нажатии на любой элемент меню управление передавалось одной процедуре
> и там узнать номер кликнутого элемента.

TMainMenu and TPopupMenu have an Items property that stands for a TMenuitem
that serves as parent for all other TMenuitems on that menu. Using a
TMenuItems Parent property you can walk up the menuitem chain until you find
this TMenuitem.

Unfortunately the way to the TMenu descendent that owns the Items menuitem is
not so easy. The best approach here is to add a little code to your forms
OnCreate event that simply stores the TMenus reference into the Tag property
of its Items.

// This handler is assigned to all menuitems OnClick event
procedure TForm1.AllmenusClick(Sender: TObject);
var
 items: TMenuItem;
begin
 items := Sender As TMenuitem;
 While items.Parent <> nil do
   items:= items.Parent;
 If items.Tag <> 0 then begin
   label1.caption := TMenu( items.tag ).Name;
   If TObject( items.tag ) Is TPopupMenu Then
     label2.caption := TPopupmenu( items.tag ).PopupComponent.Name
   else
     label2.caption := "";
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 i: integer;
begin
 for i:=0 to componentcount-1 do
   if Components[i] is TMenu then
     TMenu( Components[i] ).Items.Tag := Integer(Components[i]);
end;


--
Peter Below (TeamB)

--
С уважением, LVT.


 
TUser ©   (2004-11-24 11:18) [12]


> Интересно было бы найти ту ветку, попробую поискать

Это было несколько месяцев назад. Сейчас ее уже нет. Но могу выслать код, с которым были проблемы.


 
Sandman25 ©   (2004-11-24 11:20) [13]

[12] TUser ©   (24.11.04 11:18)

Был бы очень признателен. Мой адрес в анкете.



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

Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
1-1101228371
n-neo
2004-11-23 19:46
2004.12.05
Работа с буфером обмена...


9-1091792808
johndoe
2004-08-06 15:46
2004.12.05
DTMF на входе звуковухи


6-1095750934
Ваятель
2004-09-21 11:15
2004.12.05
WinInet - соединение с и-нетом из под прокси


3-1099469926
Victor!
2004-11-03 11:18
2004.12.05
Проблема с JetSQL


3-1099961565
Black
2004-11-09 03:52
2004.12.05
Как в DBGRID е узнать выбрана ли n-ая запись?





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