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

Вниз

Tag   Найти похожие ветки 

 
TUser ©   (2004-08-25 16:12) [0]

Никак не могу понять, где баг.
Создаю динамически кнопки, назначаю обработчик. По нажатию на кнопку в обработчике должна появиться определенная информация. Ее я записал в TList. Пишу вот так.

New(P);
P^:=...;
b.Tag:=FLockList.Add(P);
b.Hint:=inttostr(b.Tag);
b.ShowHint:=true;

Все добавляется и создается нормально. На хинтах показываются правильные таги. Дебагер показывает в соотвествующих итемал TList"а правильную инфу.
В обработчике я эту инфу достаю. Пишу вот так

L:=TMyRecord(FLockList.Items[(Sender as TControl).Tag]^);

Вроде бы все должно быть нормально. Но Tag в обработчик попадает неправильный. Если подебажить, то оказывается, что Tag может оказаться каким угодно (точнее - индекс, передаваемый в метод Get класса TList), но обычно не таким, какой нужен. Итемы в TList здесь могут только добавляться, никакого удаления никогда не происходит.
TMyRecord состоит из 2х указателей и одной string[50], хотя это не важно.
Где тут грабли?


 
MetalFan ©   (2004-08-25 16:22) [1]

маловато инфы...
а где кнопка создается?


 
Rem   (2004-08-25 16:23) [2]

PMyRecord = ^TMyRecord;

L:=PMyRecord(FLockList.Items[(Sender as TControl).Tag])^;


 
MetalFan ©   (2004-08-25 16:24) [3]

маловато инфы...
а где кнопка создается?


 
TUser ©   (2004-08-25 16:25) [4]

Кстати, если написать
L:=TMyRecord(FLockList.Items[StrToInt((Sender as TControl).Hint)]^);
то, вроде бы, все нормально. Чем так провинилось св-во Tag, оно вроде бы специально придумано для такого рода дел?


 
Rem   (2004-08-25 16:26) [5]

А по поводу:

> Но Tag в обработчик попадает неправильный. Если подебажить,
> то оказывается, что Tag может оказаться каким угодно (точнее
> - индекс, передаваемый в метод Get класса TList)


Попробуйте:

var
 i: integer;
begin
 i := TControl(Sender).Tag;
 ShowMessage(IntToStr(i));
 L:=TMyRecord(FLockList.Items[i]^);
end;


 
Skier ©   (2004-08-25 16:29) [6]

>TUser ©   (25.08.04 16:25) [4]
Самым внимательным образом присмотрется к
строчке PMyRecord = ^TMyRecord;

И подумать зачем она нужна...может тогда всё и поймёшь.


 
TUser ©   (2004-08-25 16:31) [7]

В смысле "где"? В программе моей где-то написано
b:=TBut.Create;
b.Parent:=FormX;
b.top, left, caption ...
b.OnClick:= ...

Сейчас попробую [2], но не понимаю, чем он отличается. Вроде бы там написано тоже самое, только другими словами. А написанное мной приведение типов работает. Проблема не в преобразовании типа к TMyRecord а в том, что
(Sender as TControl).Tag
неправильный.


 
TUser ©   (2004-08-25 16:35) [8]

2 [2] и [6]
Нет. Так такая же бяка.
Зачем нужно объявление типизированного указателя, я понимаю. Но к св-ву Tag это не имеет никакого отношения.

PS. Если я не понимаю чего-то важного про преобразование типов - буду рад узнать. Но, думаю, баг не в этом.


 
Rem   (2004-08-25 16:40) [9]

Интересный класс: TBut
Значит, это свой компонент?
Тогда зачем Вы используете Tag?
Не лучше уж тогда ввести в класс дополнительные поля для хранения той информации, которую вы пытаетесь хранить в отдельном списке?

Даже если хотите именно через Tag, то зачем вам отдельный список? Почему Вы не пишете: B.Tag := integer(P);?


 
TUser ©   (2004-08-25 16:48) [10]

2 [5]
Узнал, что Tag действительно неправильный.

TBut - это TButton.

> B.Tag := integer(P)
Можно и так, согласен.


 
MetalFan ©   (2004-08-25 16:59) [11]

никогда не было проблем с использованием св-ва Tag
возможно это не из-за него проблема?


 
Rem   (2004-08-25 17:01) [12]

[10]
 ХитрО...
 Ну попробуйте тогда вот так: TButton(Sender).Tag
 Уж если у Вас такие баги, то, возможно, поможет...
 У Вас в проекте, случайно, не используется нескольких разных версий одного и того же пакета или модуля?


 
TUser ©   (2004-08-25 17:04) [13]

Пока буду грузить из хинта. Дешево и сердито. Но все равно непонятно.
Спасибо всем.


 
Rem   (2004-08-25 17:11) [14]

А все-таки приведите оригинальный исходный код, в котором создаете кнопку, а также где используете тэг.



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
14-1093067609
kaZaNoVa
2004-08-21 09:53
2004.09.12
TThread и через CreateThread


14-1093317713
SPeller
2004-08-24 07:21
2004.09.12
Отошлем спамерам спам :)


1-1093417806
Рамиль
2004-08-25 11:10
2004.09.12
Перехват максимизации окна


14-1093064650
DelphiN!
2004-08-21 09:04
2004.09.12
Как откомпилировать приложение написанной на Делфи под WindowsSE?


14-1093400199
SnapIn
2004-08-25 06:16
2004.09.12
Где можно взять MapX ActiveX-компонент?





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