Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.062 c
15-1265798145
И. Павел
2010-02-10 13:35
2010.08.27
Смена базы данных.(2)


15-1264023028
Юрий
2010-01-21 00:30
2010.08.27
С днем рождения ! 21 января 2010 четверг


2-1270973363
@!!ex
2010-04-11 12:09
2010.08.27
Одновременная компиляции проекта в два exe.


15-1266186779
OneYoungMan
2010-02-15 01:32
2010.08.27
Очистка cd и dvd дисков...


15-1268773367
Nic
2010-03-17 00:02
2010.08.27
НДС - непонятно немного





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский