Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Переменная-функция   Найти похожие ветки 

 
Myrs   (2003-12-02 17:28) [0]

Может кто-нибудь сможет помочь, буду очень благодарен.

Объявляю функцию

function TfmDur.doh1(x: real): real;
var i: integer; sum: real;
begin
sum:=0;
for i:=1 to length(time) do sum:=sum+cupon[i-1]/Power(1+x/mpr, time[i-1]*mpr);
Result:=pr-sum;
end;

и переменную

var Func: function(X: real): real;

Когда я пытаюсь сделать

Func:=doh1;

компилятор выдает

Incompatible types: "regular procedure and method pointer".

Что я делаю неправильно?


 
BlackKing   (2003-12-02 17:30) [1]

a tak ne projdjot?

Func:=fmDur.doh1;


 
_юзер_   (2003-12-02 17:33) [2]

не пройдёт, так ка doh1 - это метод. а в него ещё неявно передаётся указатель на экземпляр класса


 
Юрий Федоров ©   (2003-12-02 17:33) [3]

var Func: function(X: real): real; of object;


 
Myrs   (2003-12-02 17:49) [4]

2Юрий Федоров

А что обозначает "of object"?

Так или иначе, все заработало, огромное спасибо!


 
Юрий Федоров ©   (2003-12-02 17:58) [5]


> А что обозначает "of object"?

Это значит метод, а не просто функция \ процедура


 
Тимохов   (2003-12-02 18:00) [6]

2Автор
На самом деле приписка of object значит, что переменная (в твоем случае func) будет представлять собой два указателя - один на объект, другой на метод. Если of object не писать, то func это просто один указатель.


 
BlackKing   (2003-12-02 18:12) [7]

A v Delphi 3 takoje ne prokatit?
u menja rugajetsja. :o(


 
Тимохов   (2003-12-02 18:15) [8]

ТоBlackKing
интересно а как же тогда в дельфе события реализованы если на "of object" ругается?


 
BlackKing   (2003-12-02 18:18) [9]

no ja popitalsja tozhe samoje u sebja sotvorit" - rugajetsja
Declaration expected but "OF" found.


 
Тимохов   (2003-12-02 18:20) [10]

глянь как события реализованы в любом файле с расширением из директории source\vcl.


 
_юзер_   (2003-12-02 18:20) [11]

2BlackKing:
убери точку с запятой перед of object


 
BlackKing   (2003-12-02 18:26) [12]

ponjal...

A vot takoj vopros voznik:
jest" komponenti. u nekotorih iz nih jest" funkcii i proceduri, s odinakovim imenem. Mozhno li kak-to opredelit", jest" li u komponenta iskomaja procedura ili funkcija i zapustit" jejo?


 
BlackKing   (2003-12-02 18:29) [13]

Proboval takoj variant :

procedure TForm1.Button4Click(Sender: TObject);
var
P:Pointer;
S:Procedure(Add:Boolean; S1,S2:String; Var OutS1:String; Var OutS2:String);
S11,S12:String;
begin
S11:="";
S12:="";
P:=ADComboBox1.MethodAddress("GetData");
If P<>Nil then
Begin
showmessage("yes");
S:=P;
S(False,S11,S12,S11,S12);
End;
ShowMessage("S11: "+S11);
ShowMessage("S12: "+S12);
end;

tak vot jesli v procedure zatragivajetsja hot" odna peremennaja ili svojstvo samogo komponenta - vidajotsja oshibka Access violation...


 
_юзер_   (2003-12-02 18:31) [14]

S:Procedure(Add:Boolean; S1,S2:String; Var OutS1:String; Var OutS2:String) of object;


 
BlackKing   (2003-12-02 18:33) [15]

togda takoje ne propustit
S:=P;


 
Тимохов   (2003-12-02 18:37) [16]

2blackking
type
TFunc = procedure(a: string) of object;

TObj = class
procedure func(a: string);
end;

procedure TObj.func(a: string);
begin
showmessage(a);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
kFunc: TFunc;
begin
tmethod(kFunc).Code := @TObj.func;
tmethod(kFunc).data := tobj.create();
kFunc("Hello word");
end;

-- без комментариев - просто интересный пример использования записи tmethod. Поясняет как устроены процедурные переменные ссылающиеся на методы объектов.



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
3-36507
X-filer
2003-11-22 12:20
2003.12.12
Народ, мне нужно добавить поле соответствия...редактор полей (Fie


14-36847
ИМХО
2003-11-19 05:30
2003.12.12
Уэльс - Россия... ваши прогнозы, господа?


1-36729
webpauk
2003-12-02 11:38
2003.12.12
Файлы dcu->pas


1-36760
urri
2003-12-01 20:16
2003.12.12
Object inspector - что за копонент?


7-36871
Serge
2003-09-29 21:49
2003.12.12
Перехват чтения/записи файла