| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Список методов в TList (Delphi) |
| Автор: Louken 23.9.2008, 19:57 | ||||
Вот простейший модуль:
Принцип таков, требуется организовать список методов по принципу LIFO, т.е. должен использоваться последний, загруженный в список, метод. Собсно проблемма в @Proc := FListEvent.Last; или другими словами, как из типа pointer преобразовать к TEvent. Причем, такой код работает без проблем:
Два кода, в принципе, одинаковые, но в первом случае компилятор пишет, типа не удалось инициализировать переменную Proc. Подскажите что делать, а то уже всю голову сломал. |
| Автор: CodeMonkey 23.9.2008, 21:42 |
| Ваш второй пример не работоспособен. Компилятор обычно такого не допускает, но в данном случае вы его "уломали". Ваш пример работает только случайно, благодаря тому, что в ShowMsg вы не используете Self (т.е. саму форму). Вы понимаете разницу между процедурой и методом ("of object"!)? Первое - это просто указатель на код (4 байта), второе - это указатель на код + указатель на объект (8 байт). Соотвветствено, вы не можете просто запихнуть в TList свой TEvent без потерь. Сейчас у вас почти бред написан. Взгляните также, например, на это: http://forum.sources.ru/index.php?showtopic=248820 |
| Автор: VICTAR 23.9.2008, 21:52 |
| Не вникал в суть вопроса, но возможно подойдет TQueue. |
| Автор: CodeMonkey 24.9.2008, 05:24 | ||
Потому что в Proc у вас как сидел объект, так и сидит - вы его не читаете и не записываете. А вот если бы вы копировали Proc, скажем, в Proc2 через q - вот тогда бы и нарвались. А вариантов через List может быть даже несколько. Самый муторный - выделять память под каждый элемент списка. Попроще - хранить в нечётных элементах TList указатели на код, в чётных - указатели на объект. В таком разрезании на части вам поможет тип TMethod - посмотрите его определение. К нему можно привести TEvent. Ну и ещё всяко разно можо придумать всего. P.S. Эх, были бы раньше в Delphi генерики, ничего делать бы и не пришлось. Объявил бы TList<TEvent> и... всё. |
| Автор: Louken 24.9.2008, 16:24 | ||
| CodeMonkey Теперь то нормально?
|
| Автор: CodeMonkey 25.9.2008, 08:05 |
| Ну вроде похоже на правду |