• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

Вопрос по Delphi

  • Автор темы dima00
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

dima00

#1
Скажите, пожалуйста, можно ли в Delphi как нибудь вызывать процедуру или функцию через переменную типа string, содержащую имя процедуры (ф-ции). Например вызвать свою процедуру procedure1 с помощью переменной s='procedure1', но не используя if s=... then procedure1, а каким нибудь оператором. Т.е. чтобы процедуры вызывались пользователем например через edit
 
B

Barmutik

#3
В некоторой мере Вам поможет MethodAddress, но если Вам нужно полномасштабное решение то испоьлзуйте скриптовые языки...
 
C

chingiz

#4
Действительно в Delphi это вряд ли возможно.
Но я не пойму чем вам не нравится конструкция
if Edit.Text=... then Procedure1 и т. д.
или же case...
 
B
#5
Для: dima00
Вместо Edit`а попробуй использовать TComboBox, в property Items: TStrings занесешь все свои процедуры которые должны вызываться (ComboBox1.Items.AddObject('procedure1', TObject(procedure1()))
Таким образом у тебя будет возможность иметь и название и адрес твоих процедур.

Другой способ: хранить процедуры в dll библиотеке, и использовать API функции по позднему связыванию.
Код:
HINSTANCE LoadLibrary(

LPCTSTR lpLibFileName 	// address of filename of executable module 
);
FARPROC GetProcAddress(

HMODULE hModule,	// handle to DLL module 
LPCSTR lpProcName 	// name of function 
);
PS: Сейчас у меня delphi не стоит поэтому код не проверял, если будет выдавать ошибку попробуй заменить TObject(procedure1()) на TObject(@procedure1()) или еще как нибуть приведи procedure1() к типу TObject.
 
Статус
Закрыто для дальнейших ответов.
Вверх Снизу