![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Louken |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
Вот простейший модуль:
Принцип таков, требуется организовать список методов по принципу LIFO, т.е. должен использоваться последний, загруженный в список, метод. Собсно проблемма в @Proc := FListEvent.Last; или другими словами, как из типа pointer преобразовать к TEvent. Причем, такой код работает без проблем:
Два кода, в принципе, одинаковые, но в первом случае компилятор пишет, типа не удалось инициализировать переменную Proc. Подскажите что делать, а то уже всю голову сломал. ![]() |
||||
|
|||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Ваш второй пример не работоспособен. Компилятор обычно такого не допускает, но в данном случае вы его "уломали".
Ваш пример работает только случайно, благодаря тому, что в ShowMsg вы не используете Self (т.е. саму форму). Вы понимаете разницу между процедурой и методом ("of object"!)? Первое - это просто указатель на код (4 байта), второе - это указатель на код + указатель на объект (8 байт). Соотвветствено, вы не можете просто запихнуть в TList свой TEvent без потерь. Сейчас у вас почти бред написан. Взгляните также, например, на это: http://forum.sources.ru/index.php?showtopic=248820 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
Не вникал в суть вопроса, но возможно подойдет TQueue.
|
|||
|
||||
Louken |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
CodeMonkey
Если я запишу ShowMessage(Self.Memo1.Text); вместо ShowMessage(s); то все работает без проблем. Как же мне создать список методов? Это нужно для загрузки XML дерева. где для каждого элемента (тега) есть свой метод для загрузки. Добавлено через 7 минут Ладно, уже определился, буду использовать динамический массив типа: var FListEvent: array of TEvent; Всем спасибо. |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Потому что в Proc у вас как сидел объект, так и сидит - вы его не читаете и не записываете. А вот если бы вы копировали Proc, скажем, в Proc2 через q - вот тогда бы и нарвались. А вариантов через List может быть даже несколько. Самый муторный - выделять память под каждый элемент списка. Попроще - хранить в нечётных элементах TList указатели на код, в чётных - указатели на объект. В таком разрезании на части вам поможет тип TMethod - посмотрите его определение. К нему можно привести TEvent. Ну и ещё всяко разно можо придумать всего. P.S. Эх, были бы раньше в Delphi генерики, ничего делать бы и не пришлось. Объявил бы TList<TEvent> и... всё. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Louken |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
CodeMonkey
Теперь то нормально?
|
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Ну вроде похоже на правду
![]() -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |