Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюки с вызовом процедуры по ссылке [D7, XP]


Страницы:   1 2 3 4

yantar92 ©   (2009-11-02 13:29:00) 

Проблема в том, что при передаче ссылки на процедуру как параметр функции начинаются глюки с методами глобального класса.
Код:

...
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   (2009-11-02 17:10:00) [21]

нет, говорит то же что и раньше: "project bi.exe raised exception class Elnvalid Pointer with message "Invalid pointer operation". process stopped"


Сергей М.   (2009-11-02 17:06:00) [22]

ПРямо так и говорит "не помогаю" ?)


yantar92   (2009-11-02 17:05:00) [23]

не помогает


Сергей М.   (2009-11-02 17:03:00) [24]

Тогда убирай отовсюду все var и const.

А вызывай так:

dcAst:=dc_A_st(..., @PaintXY,...);


yantar92   (2009-11-02 17:00:00) [25]

да


Сергей М.   (2009-11-02 16:53:00) [26]


> yantar92   (02.11.09 16:37) [52]


Т.е. paintXY - это регулярная процедура, а dc_A_st - регулярная функция ?


yantar92   (2009-11-02 16:37:00) [27]

>Сергей М. ©   (02.11.09 16:25) [51]
>
>
>
>Это самое "private метод" какое отношение имеет к коду в [45], в котором >никакими приватными методами даже не пахнет  ?
я по поводу приват-метод писал из-за [14] и это действительно никакого отношения к [45] не имеет.


Сергей М.   (2009-11-02 16:25:00) [28]


> yantar92   (02.11.09 16:16) [45]


Тогда вернемся к нашим баранам см. [16]

> ну private метод.


Это самое "private метод" какоеотношение имеет к коду в [45], в котором никакими приватными методами даже не пахнет  ?


RWolf   (2009-11-02 16:23:00) [29]

и да, Button1.Hide;  :)


RWolf   (2009-11-02 16:22:00) [30]

быстрее будет поставить GExperts (или что-нибудь вроде) и привязать нужные слова на алиасы из пары букв. Сокращать код в ущерб читабельности — это неправильный подход.


Anatoly Podgoretsky   (2009-11-02 16:20:00) [31]


> так быстрее:))

Чего же тогда выше не написал 1=1


clickmaker   (2009-11-02 16:19:00) [32]

> так быстрее:))

вот так круче
Button1.Visible:=(2*2=5);


yantar92   (2009-11-02 16:17:00) [33]

>RWolf ©   (02.11.09 16:01) [44]
>
>1=2 — это такой модный способ написать False? :)

так быстрее:))


yantar92   (2009-11-02 16:16:00) [34]

implementation
...
procedure paintXY(const x:extended; const y:extended; var series_:Tlineseries);
begin
series_.ParentChart.Parent.Repaint;
series_.AddXY(x,y);
end;


RWolf   (2009-11-02 16:01:00) [35]

1=2 — это такой модный способ написать False? :)


Сергей М.   (2009-11-02 15:45:00) [36]


> proc:= paintXY;


Опять в прятки играешься ?
Что такое paintXY?
Где и как объявлено и реализовано ?


yantar92   (2009-11-02 15:37:00) [37]

procedure TForm1.Button3Click(Sender: TObject);
var i,j,k:longint; koord:Tkoord;
dcAst:extended;     proc:Tpaint;
begin
chart1.Visible:=true;
Panel1.Visible:=1=2;
Button1.Visible:=1=2;
Button2.Visible:=1=2;

{E_AA:=-1E-20;E_BB:=-3E-20;E_AB:=(E_AA+E_BB)/2;
T:=1E3;
C_A:=0.5;C_B:=1-C_A;
D:=200;
width_:=10;
height_:=10;
N_layers:=200;D_layer:=trunc(D/N_layers)+abs(sign(frac(D/N_layers)));}

read_parameters;

series_:=TLineSeries.Create(Self);
series_.ParentChart:=chart1;
chart1.Parent:=main_form;
proc:=paintXY;
Application.ProcessMessages;
dcAst:=dc_A_st(100000000,4000,atoms,C_A,C_B,D,width_,height_,E_AA,E_BB,E_AB,T,pr oc,series_);
Label16.Caption:=floattostr(dcAst);
end;


Сергей М.   (2009-11-02 14:40:00) [38]


> вызвать не dc_A_st а в


Ты прикидываешься что ли ?)

Тебе ж черным по-русски говорят - покажи где и как ты вызываешь dc_A_st ..


Медвежонок Пятачок   (2009-11-02 14:37:00) [39]

отключи оптимизацию кода


RWolf   (2009-11-02 14:36:00) [40]

особых проблем в коде не видно, надо выше смотреть — как вызывают, что передают, как данные хранятся.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо