Форум: "Основная";
Текущий архив: 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.038 c