Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 12:32   #1
yantar92
Новичок
Джуниор
 
Аватар для yantar92
 
Регистрация: 02.11.2009
Сообщений: 9
Вопрос Глюки с вызовом процедуры по ссылке

Проблема в том, что при передаче ссылки на процедуру как параметр функции начинаются глюки с методами глобального класса.
Код:
...
type 
 Tpaint=procedure (const x:extended; const y:extended; var series:Tlineseries);
...
procedure paint(const x:extended; const y:extended; var series:Tlineseries);
begin
 series.AddXY(x,y);
 series.ParentChart.Parent.Repaint;
end;
...
function dc_A_st(... var paint:Tpaint;var series:Tlineseries ...):extended;
...
begin
...
 paint(x,y,series);
...
end;
При исполнении процедуры paint выбивает "Ivalid pointer operation", а при дебаге пишет, что метод Repaint класса series.ParentChart.Parent - не определён, тогда как сам класс является определенным.
"Никакие украшения не являются постоянными, будь то картина или цветы в нише. Перемены — да. Но суть всегда остается неизменной" Перл Бак

Последний раз редактировалось yantar92; 02.11.2009 в 13:30.
yantar92 вне форума Ответить с цитированием
Старый 02.11.2009, 12:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Плохо то что ты переменную-параметр и процедуру назвал одинаково.
Во-вторых: как ты вызываешь dc_A_st?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 13:08   #3
yantar92
Новичок
Джуниор
 
Аватар для yantar92
 
Регистрация: 02.11.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Во-первых: Плохо то что ты переменную-параметр и процедуру назвал одинаково.
Это я для наглядности переписал. На самом деле они по разному называются.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Во-вторых: как ты вызываешь dc_A_st?
Код:
...
var proc:TPaint;
...
begin
...
 proc:=paint;
 dcAst:=dc_A_st(... proc,series ...);
...
"Никакие украшения не являются постоянными, будь то картина или цветы в нише. Перемены — да. Но суть всегда остается неизменной" Перл Бак
yantar92 вне форума Ответить с цитированием
Старый 02.11.2009, 13:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну не знаю...
у меня такое:
Код:
  Tpaint=procedure (const x:extended; const y:extended;series:Tlineseries);

procedure paint(const x:extended; const y:extended; series:Tlineseries);
begin
 write('qq');readln;
end;

function dc_A_st(paintA:Tpaint):extended;
begin
 paintA(1,2,3);
end;

begin
 dc_A_st(paint);
  { TODO -oUser -cConsole Main : Insert code here }
end.
Работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 13:33   #5
yantar92
Новичок
Джуниор
 
Аватар для yantar92
 
Регистрация: 02.11.2009
Сообщений: 9
По умолчанию

Там всё ясно, но у меня не работает именно series.ParentChart.Parent.Repaint, а если его убрать то все работает.
"Никакие украшения не являются постоянными, будь то картина или цветы в нише. Перемены — да. Но суть всегда остается неизменной" Перл Бак
yantar92 вне форума Ответить с цитированием
Старый 02.11.2009, 13:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит series неверно передаешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 13:54   #7
yantar92
Новичок
Джуниор
 
Аватар для yantar92
 
Регистрация: 02.11.2009
Сообщений: 9
По умолчанию

но в то же время если после вызова paint-а написать application.processmassages, а series.ParentChart.Parent.Repaint с paint-а убрать, то вылетает уже на application.processmassages, тогда как без вызова paint всё прекрасно работает
"Никакие украшения не являются постоянными, будь то картина или цветы в нише. Перемены — да. Но суть всегда остается неизменной" Перл Бак
yantar92 вне форума Ответить с цитированием
Старый 02.11.2009, 14:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит точно процедуру не верно вызываешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 14:12   #9
yantar92
Новичок
Джуниор
 
Аватар для yantar92
 
Регистрация: 02.11.2009
Сообщений: 9
По умолчанию

тогда как вызывать???
"Никакие украшения не являются постоянными, будь то картина или цветы в нише. Перемены — да. Но суть всегда остается неизменной" Перл Бак
yantar92 вне форума Ответить с цитированием
Старый 02.11.2009, 14:15   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда нужно смотреть что ты там наворотил.
У меня как я сказал все ок.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между явным и неявным вызовом процедур .Phoenix Общие вопросы Delphi 1 23.09.2009 00:43
Глюки DynamicSkinForm k1r1ch Компоненты Delphi 5 10.09.2009 15:06
Проблема с вызовом exec() из php на linux Fatum123 PHP 6 13.04.2009 22:36
Глюки Делфи Killbrum Помощь студентам 9 20.05.2008 20:31
проблемы с вызовом окна логина. terion БД в Delphi 3 15.11.2006 00:53