![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюки с вызовом процедуры по ссылке [D7, XP]
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]особых проблем в коде не видно, надо выше смотреть — как вызывают, что передают, как данные хранятся.