Главная страница
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.014 c
7-36858
SlavaZ
2003-10-07 14:55
2003.12.12
Как узнать температуру CPU


1-36593
GreySerg
2003-12-01 18:20
2003.12.12
Как получить доступ к свойствам объекта , у которого есть PopupM


8-36775
Sergeys
2003-08-15 20:18
2003.12.12
Как можно наложить(вставить) изображение....


3-36512
Урмат
2003-11-20 12:26
2003.12.12
кодировка dbf ADO


1-36611
mynameis
2003-12-01 15:04
2003.12.12
Перемещение мыши по десктопу из моей программы.