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

Вниз

Вызов процедуры   Найти похожие ветки 

 
Mdsns   (2003-08-13 06:14) [0]

Как вызвать процедуру или функцию зная ее имя, через строковую переменную??..


 
Vulko   (2003-08-13 06:34) [1]

...

public
procedure proc;

...

procedure tform1.buttonclick(sender: tobject);
begin
...
proc;
...
end;
...


 
Palladin   (2003-08-13 07:14) [2]

никак


 
k-man   (2003-08-13 07:52) [3]

> Vulko © (13.08.03 06:34)

Ты хоть сам понял чего ты написал?


 
Fktrc   (2003-08-13 08:08) [4]

И чего ругаетесь. Вероятно, человек имел в виду следующее - в строковой переменной лежит имя процедуры (причем сформированное в runtime - иначе не стоило и спрашивать). Как вызвать эту процедуру? Кстати, ответ интересен и мне. Я читал, что "используя механизм RTTI, такое можно сделать" (с какого-то форума), но как?


 
Palladin   (2003-08-13 08:21) [5]

никак


 
Zacho   (2003-08-13 08:32) [6]

А может автора исходного поста устроят переменные процедурного типа ?


 
wl   (2003-08-13 08:50) [7]

Можно попробовать занести в StringList имена всех процедур в свойство Strings и адреса этих процедур в свойство Objects. Тогда для вызова нужной процедуры выполняется поиск по имени с последующим вызовом по адресу из свойства Objects.

Надеюсь понятно объяснил...


 
Skier   (2003-08-13 08:53) [8]

GetProcAddress(...) ?


 
Толик   (2003-08-13 10:57) [9]

только для published: TObject.MethodAddress - в качестве параметра принимает строковое имя процедуры и возвращает указатель на неё. Через этот указатель и вызывать.


 
HolACost!   (2003-08-13 11:04) [10]

Я больше склоняюсь к исползованию птаблицы соответстий строковой переменной и адреса вызываемой функции!


 
Юрий Федоров   (2003-08-13 11:25) [11]

или как Skier © (13.08.03 08:53)
Только тогда их все экспортировать надо


 
Толик   (2003-08-13 11:29) [12]

Короче, все выше приведённые методы сводятся к HolACost! (13.08.03 11:04) [10] Другой вопрос, реализовано ли это кем-то или надо писать самому.


 
Skier   (2003-08-13 11:37) [13]

>Толик © (13.08.03 11:29) [12]
для [10] ещё нужно будет описание параметров добавлять... и дальше со всеми остановками.
Конечная остановка - интерпретатор. :)


 
HolACost!   (2003-08-13 11:54) [14]

Кстати не обязятельно все параметры! Можно только один посылать - адрес некой структуры типа Просто Pointer! А каждая процедура будет сама приводить этот адрес к нужному ей типу. и соответственно вызывающая процедура будет передавать адрес...


 
HolACost!   (2003-08-13 11:56) [15]

Кстати - это реализовано, но не на дельфи - принцип реализации просто - для простоты - можно простой пребор всех значений... для скорости - иметь отсортированную таблицу по строковым меткам и работать логорифмическим поиском! Короче делаем как делает это наша великая Windows 3.1


 
Song   (2003-08-13 12:03) [16]

type
TMacroProc = procedure(param: Integer); массив, сопоставляющий имена процедур их адресам во время выполнения приложения: type
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;


 
Skier   (2003-08-13 12:10) [17]

>Song © (13.08.03 12:03) [16]
Проблема в том что параметры могут быть разными.


 
wl   (2003-08-13 13:42) [18]

>Skier © (13.08.03 12:10) [17]

Использовать тип Variant :)


 
HolACost!   (2003-08-13 14:48) [19]

Я за свой вариант! Такая весч - ну типа подобная - реализована в одной оске!



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

Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.018 c
1-81611
Demon-Trouble
2003-08-13 07:06
2003.08.25
Синтаксис AllwaysShowSelect


1-81622
Васька
2003-08-12 23:03
2003.08.25
TaskBar


1-81827
off
2003-08-13 13:32
2003.08.25
Количество месяцев между дататми.


1-81791
frost
2003-08-14 08:57
2003.08.25
Как отобразить файл с письмом *.eml


1-81626
Itsme
2003-08-12 15:24
2003.08.25
ошибка RPC-сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский