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

Вниз

как узнать адрес процедуры?   Найти похожие ветки 

 
Delphist2   (2010-03-25 14:24) [0]

Поясню на примере:
for i:=0 to n do begin
if checkbox1.checked then proc1 else proc2;
//еще много кода
end;


Чтобы избежать этой проверки хотелось бы присвоить в переменную типа p: procedure адрес нужной процедуры таким образом: @p:= перед самим циклом. И тогда код будет выглядеть:

//здесь
if checkbox1.checked then @p:=... //здесь надо присвоить адрес proc1
else @p:=... //а здесь proc2. Только как это сделать?
for i:=0 to n do begin
p; //выполняем заранее выбраную процедуру
//еще много кода
end;


Процедуры не из dll а из самого модуля. Вопрос: что нужно записать после "@p:="?


 
Сергей М. ©   (2010-03-25 14:32) [1]

procedure Proc1;
begin
..
end;

procedure Proc2;
begin
..
end;

..
type
 TProc = procedure;

var
 p: TProc;

..

if .. then p := @proc1 else p := @proc2;
..

p;


 
Leonid Troyanovsky ©   (2010-03-25 19:04) [2]


> Сергей М. ©   (25.03.10 14:32) [1]

> if .. then p := @proc1 else p := @proc2;

Если они обе TProc, то лучше без @.

> Delphist2   (25.03.10 14:24)  


const
 procs: array [Boolean] of TProc =(proc1, proc2);
..
 p := procs[checkbox1.checked];
 p;

Только, чур не мешать регулярные процедуры с контролами.

--
Regards, LVT.


 
{RASkov} ©   (2010-03-25 20:47) [3]

> p := procs[checkbox1.checked];
> p;

p - не нужна. Достаточно:
begin
 procs[checkbox1.checked];
end;


 
Delphist2   (2010-03-25 21:48) [4]

А если одна из этих процедур пустая? Ну допустим, действие надо выполнять или не выполнять в теле цикла в зав. от того, стоит ли флажок. Что лучше по быстродействию: передача упр. в процедуру и тут же возврат из нее или проверка условия?


 
Leonid Troyanovsky ©   (2010-03-26 07:58) [5]


> {RASkov} ©   (25.03.10 20:47) [3]

> p - не нужна. Достаточно:

Небольшая разница есть, в разименовании.

> Delphist2   (25.03.10 21:48) [4]
> А если одна из этих процедур пустая?


if checkbox1.checked then
 for i:=0 to n do


> Что лучше по быстродействию:

Проверка условия лучше.
Но, если суть в обработке пользовательского ввода, то
все это монопенисуально.

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.077 c
6-1224228159
Forbi
2008-10-17 11:22
2010.08.27
Indy10 TCPServer и закрытие сессий


2-1267379618
Pavel
2010-02-28 20:53
2010.08.27
Загрузка данных из файла в поток


15-1265220403
Jeltok
2010-02-03 21:06
2010.08.27
Помогите в 1 строчке по паскалю))


15-1273962210
[true]TRIx
2010-05-16 02:23
2010.08.27
Прошу потестить портал.


6-1223299271
JohnKorsh
2008-10-06 17:21
2010.08.27
Работа программ с сетевыми компонентами в ОС Vista.