img
00:00
imgDRKB online - Как использовать переменную для имени процедуры?
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  Общие вопросы
  Объектное ориентирование
  Работа со строками
  Работа с датами и временем
  Работа с числами
  Работа с битами
  Работа с массивами
  Работа с указателями, память
  Множества, записи и перечисляемые типы
  RTTI и другие трюки с информацией о классах, модулях и т.п.
  Взаимодействие с другими языками
  Threads
  Работа с коллекциями
  RTL Delphi (краткий справочник)
  Базовые классы
  Скрипты, компилляторы и связанные с ними вопросы
  Лекции по построению компилятора на Pascal
  Расчет введенной формулы
  Использование Microsoft ScriptControl (статья)
  Вокруг и около Паскаля или другие компилляторы Дельфи/Паскаль
  VCL
  Системные функции и WinAPI
  Базы данных
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=65] Комментариев: 0 
Как использовать переменную для имени процедуры?

Взято из FAQ: http://blackman.km.ru...t4.phtml

Каким образом можно использовать переменную типа String в качестве имени процедуры?

Если все процедуры, которые вы собираетесь вызывать, имеют список с одними и теми же параметрами (или все без параметров), то это не трудно. Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например:

delphi
type
{©Drkb v.3(2007): www.drkb.ru}

TMacroProc = procedure(param: Integer);
//массив, сопоставляющий имена процедур их адресам во время выполнения приложения:
TMacroName = string[32];
TMacroLink = record
name: TMacroName;
proc: TMacroProc;
end;
TMacroList = array [1..MaxMacroIndex] of TMacroLink;

const
Macros: TMacroList = (
(name: 'Proc1'; proc: Proc1),
(name: 'Proc2'; proc: Proc2),
...
); //интерпретатор функций, типа:

procedure CallMacro(name: String; param: Integer);
var
i: Integer;
begin
for i := 1 to MaxMacroIndex do
if CompareText(name, Macros[i].name) = 0 then
begin
Macros[i].proc(param);
break;
end;
end;

{Макропроцедуры необходимо объявить в секции Interface модуля или с ключевым словом Far, например: }
procedure Proc1(n: Integer); far;
begin
...
end;

procedure Proc2(n: Integer); far;
begin
...
end;





@Drkb::00071
Взято с Vingrad.ru http://forum.vingrad.ru
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
14-11-2019 19:44
Programmer
скучно.. А давайте создадим беседу в ВК по десксофту?
11-10-2019 10:05
Programmer
А может быть он просто тоже сидит в десксофте
10-10-2019 10:44
antonn
Есть французская певица "Kareen Antonn", может ее трек скачал smiley
09-10-2019 03:46
Bact
У моего брата в загрузках есть файл с именем antonn, может ли быть это совпадением?
09-10-2019 03:37
Bact
есть кто? :0
03-10-2019 14:20
antonn
Примерно как гостевую книгу, только рисуется на всех страницах.
02-10-2019 19:09
Programmer
антонн, как ты сделал чат?
02-10-2019 19:09
Programmer
есть
15-09-2019 18:55
Expendobrooo
Есть кто живой?
15-09-2019 17:36
Programmer
сайт сдох smiley
Статистика
 СегодняВсего
Посетителей602116575
Запросов308324703347
Online
Пользователей0
Гостей19
imgimgimgimg
 
img
     00:00