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

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

Процедура или функция в var-е [D7, WinXP]


Дмитрий_177 ©   (2006-01-10 17:35:00) 

Я видел в исходниках некоторых компонентов что прям в разделе описания переменных(var) процедуры, пишут еще какуюнибудь процедуру... я как понимаю что эта процедура или функция хранится в пямяти пока работает процедура которая ее содержит, и используется она только в этой процедуре, а потом уничтожается, при завершении процедуры ее содержащей... на сколько эффективен этот способ или всетаки лучше процедуры все как обычно делать? А еще подскажите пожалуйста как правильно объявлять такие процедуры в var-е, а то я уже не помню где я это видел...(((


Desdechado   (2006-02-05 15:33:00) [1]

такие inline-процедуры имеют смысл только тогда, когда код в ней является обобщением кода  только вызывающей функции и не имеет смысла вне ее


Дмитрий_177   (2006-02-05 14:56:00) [2]

Спасибо, вот так заработало ))) А еще такой вопрос, вообще рекомендуется ли такое использование процедуры в процедуре или лучше ее отдельно написать?

procedure TForm1.Button1Click(Sender: TObject);
procedure summa(a, b: integer);
 begin
 ListBox1.Items.Add(IntToStr(a) + ' + ' + IntToStr(b) + ' = ' + IntToStr(a + b));
 end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;


palva   (2006-02-05 14:21:00) [3]

Неверная формулировка вопроса. Процедура находится не в разделе переменных а рассматривается как отдельный раздел. То есть если вы завершив процедуру хотите описать еще несколько переменных, то вам снова надо написать слово var. А var непосредственно перед процедурой рассматривается как ошибка, получается что это как бы пустой раздел переменных.


Плохиш   (2006-02-05 02:30:00) [4]


> Дмитрий_177   (05.02.06 01:10) [8]

var - это объявление переменных,
а в твоём случае процедура - не переменная, а вложенная.

PS. Я так понимаю, изучать программирование по книжкам сейчас совсем не модно.


Дмитрий_177   (2006-02-05 01:10:00) [5]

подставил в var перед процедурой "summa" просто так две переменные:
c,d: integer;
и заработало... что-то я не пойму почему так...


Дмитрий_177   (2006-02-05 01:04:00) [6]

Что-то у меня не работает так...

procedure TForm1.Button1Click(Sender: TObject);
var
procedure summa(a, b: integer);
 begin
 ListBox1.Items.Add(IntToStr(a) + ' + ' + IntToStr(b) + ' = ' + IntToStr(a + b));
 end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;


VirEx   (2006-01-10 18:21:00) [7]


>  [5] VirEx ©   (10.01.06 18:19)

блин, разбежался :)
pro1 ведь уже объявлена


VirEx   (2006-01-10 18:19:00) [8]

type
 TSomeProc=procedure(a,b:string);
 TSomeFunc=function(c:integer):boolean;
...
function pro1; external 'foo.dll';
function fun1; external 'foo.dll' name 'fun';
...
var
pro2:TSomeProc;
fun2:TSomeFunc;
pro3:procedure(a,b:string);
fun3:function(c:integer):boolean;
pro4:Pointer;
fun4:Pointer;
...
h:=loadLibrary('foo.dll');
pro:=GetProcAddress(h,'pro');
fun:=GetProcAddress(h,'fun');
pro1:=GetProcAddress(h,'pro');
fun2:=GetProcAddress(h,'fun');
pro4:=Pointer(pro);
fun4:=@fun;
...
pro('text1','text2');
b:=fun(5);
..
FreeLibrary(h);


Дмитрий_177   (2006-01-10 18:16:00) [9]

Спасибо! :)


EvS   (2006-01-10 18:03:00) [10]

procedure Procedure1;
var a,b,...;
procedure Procedure2(c,d);
begin
....
end;
begin
....
Procedure2(a,b);

....
end;


Johnmen   (2006-01-10 17:39:00) [11]

Видимо ты имеешь в виду процедурный тип.
Все подробности и нюансы есть в хелпе, F1.


Leonid Troyanovsky   (2006-01-10 17:39:00) [12]


> Дмитрий_177   (10.01.06 17:35)  


 Object Pascal Language Guide: Local declarations

--
Regards, LVT.


Наверх

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