Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2008, 08:04   #1
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию Вызов процедуры при обьявлении функции

Приветствую.
Появился очень насущный вопрос.
Можно ли при объявлении функции в разделе формальных параметров указать процедуру с уникальным именем, что бы в момент запуска функции происходил и запуск процедуры.
ivannikov вне форума Ответить с цитированием
Старый 12.03.2008, 08:31   #2
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

А зачем это надо?
Вторую процедуру можно вызвать или до вызова функции, или в самой функции...
andrey4623 вне форума Ответить с цитированием
Старый 12.03.2008, 09:59   #3
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

у меня прога в VBA написана из нее перевожу
так вот там идет обращение к функции
а она в свою очередь запускает процедуру
которая работает
как обратная связь(виртуальная машина передаёт данные в нее
а она их выводит на экран)
Пробую в Delphi то же сделать пишет что не актуальный параметр
"Процедуру с непустым списком аргументов можно вызвать только из другой процедуры или функции, использовав ее имя со списком фактических значений аргументов в качестве одного из операторов VBA."
b "Если вызываемая процедура имеет уникальное имя и находится в том же модуле, что и вызывающая процедура, то для ее вызова достаточно указать это имя и задать список фактических значений аргументов, не заключая его в скобки."

Такое можно в делфи воспроизвесте
ivannikov вне форума Ответить с цитированием
Старый 12.03.2008, 10:12   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Вот это что-ли ? :

Код:
type
    TShow = procedure (S:String);

procedure test( T: TShow );
begin
    T('ghfsjdhjkdfh');
end;

procedure Show1(S:String);
begin
    ...
end;

test(Show1);
alexBlack вне форума Ответить с цитированием
Старый 12.03.2008, 11:05   #5
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

ХМ ни че не понял если честно))
у меня так
procedure Tform1.GDSCallback(var uKey, iPoints :longint);
///////////////////////////////
Function VBRegisterGDSTask (GDSCallback, uPort,
uMask; 'MTL');
при компеляции пишет ""incompatible types: integer and procedure, untyped pointer or untyped parametr""
я понимаю что параметры не совместимы в функции когда я указываю формальные параметры
процедура идет целым числом
но как ее по другому прописать я не знаю
вот и вопрос
есть ли у кого примр
?как при обьявлении функции в разделе формальных параметров указать процедуру?
ivannikov вне форума Ответить с цитированием
Старый 12.03.2008, 11:54   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

покажи код
alexBlack вне форума Ответить с цитированием
Старый 12.03.2008, 13:20   #7
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

решил уже проблему скорее всего через :
Процедурные типы данных

Наряду с уже известными типами данных в языке Delphi введен так называемый процедурный тип, с помощью которого обычные процедуры и функции можно интерпретировать как некоторую разновидность переменных. Определение процедурного типа состоит из зарезервированного слова procedure или function, за которым следует полное описание параметров. Для функции дополнительно указывается тип результата. Символические имена параметров никакой роли не играют, поскольку нигде не используются.

type
TProc = procedure (X, Y: Integer);
TFunc = function (X, Y: Integer): Boolean;

Определив процедурный тип, можно непосредственно перейти к так называемым процедурным переменным. Они объявляются точно так же, как и обычные переменные.

var
P: TProc;
F: TFunc;

При работе с процедурной переменной важно понимать, что она не дублирует код подпрограммы, а содержит лишь ее адрес. Если обратиться к такой переменной как к подпрограмме, произойдет выполнение подпрограммы, адрес которой записан в переменной.

program Console;

{$APPTYPE CONSOLE}

uses
SysUtils;

function Power(X, Y: Double): Double;
begin
Result := Exp(Y * Ln(X));
end;

type
TFunc = function (X, Y: Double): Double;

var
F: TFunc;

begin
F := Power; // В переменную F заносится адрес функции Power
Writeln('2 power 4 = ', F(2, 4)); // Вызов Power посредством F
Writeln('Press Enter to exit...');
Readln;
end.
ivannikov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов процедуры igbizon Общие вопросы Delphi 5 02.09.2008 10:44
Вызов процедуры Kashp Общие вопросы Delphi 4 31.03.2008 16:22
вызов процедуры из exe? Volkogriz Общие вопросы Delphi 9 16.11.2007 22:34
Вызов процедуры Илья Кибель Помощь студентам 7 17.09.2007 19:43
Вызов процедуры Monoflextor Общие вопросы Delphi 2 28.04.2007 17:32