Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

var Proc: procedure а дальше что?!   Найти похожие ветки 

 
Grief ©   (2005-05-15 10:18) [0]

Помогите, пожалуйста, мне необходимо сделать переменную, которая сможет хранить указатели на процедуры с разным количеством параметров.
То есть, например, когда я делаю
var P: procedure;
А затем присваиваю:
P := GetNewLink(1, 1, I);
У меня, понятное дело, вываливается ошибка. Как этого избежать?


 
Юрий Зотов ©   (2005-05-15 10:28) [1]

type
 TProc = procedure(Params: array of const);
var
 P: TProc;
begin
 P := @GetNewLink;


 
Grief ©   (2005-05-15 10:39) [2]

угу, пасибки.... огромное спаибки!!!!


 
Grief ©   (2005-05-15 11:23) [3]

А не подскажите, а как теперь эту процедуру запустить? Я и так, и сяк: Dialog[CurrentDialog].Button[I].Proc;
А он говорит, что не хватает параметров. Дело в том, что у переменной процедуры вообще не может быть параметров!


 
Ozone ©   (2005-05-15 11:41) [4]

Proc([<список параметров>])


 
Grief ©   (2005-05-15 22:36) [5]

А если их нет?


 
Marser ©   (2005-05-15 23:29) [6]

Согласно инструкции. Как обычную подпрограмму.


 
Grief ©   (2005-05-16 13:59) [7]

угу, вроде ясно, то есть Proc([]); так что ли?


 
GrayFace ©   (2005-05-16 15:42) [8]

угу


 
Grief ©   (2005-05-19 13:59) [9]

М-дя, я конечно тормоз, но

 Main.Button[4].Proc := @DestroyWindow([Main.Wnd]);

Выдает ошибку Incompatible types "HWND" and "Set"
при

TButton = object
   Name: string;
   Position: TRectangle;
   Proc: procedure(Parameters: array of const);
   ...

Что не так?


 
Eraser ©   (2005-05-19 14:01) [10]

Grief ©   (19.05.05 13:59) [9]
 Proc: procedure(Parameters: array of const);


Ошибка.


 
Reindeer Moss Eater ©   (2005-05-19 14:08) [11]

... := @this_pascal_module.DestroyWindow([Main.Wnd]);


 
Eraser ©   (2005-05-19 14:11) [12]

Eraser ©   (19.05.05 14:01) [10]

Каюсь. Соврал.


 
Grief ©   (2005-05-19 14:15) [13]

Reindeer Moss Eater - это не шутка?


 
Reindeer Moss Eater ©   (2005-05-19 14:15) [14]

Reindeer Moss Eater - это ник.


 
Reindeer Moss Eater ©   (2005-05-19 14:16) [15]

unit Windows;

.....
function DestroyWindow(hWnd: HWND): BOOL; stdcall;
.....


 
Grief ©   (2005-05-19 14:18) [16]

а... имеется ввиду, что то вроде ... := Unit1.DestroyWindow([Main.Wnd]); ?
Нет, неправильно, я ведь использую обычный DestroyWindow из Windows  Почему же неработает?
Eraser - а как правильно?


 
Reindeer Moss Eater ©   (2005-05-19 14:18) [17]

я ведь использую обычный DestroyWindow из Windows  Почему же неработает?

Потому что [15]


 
Grief ©   (2005-05-19 14:19) [18]

ну уж не совсем тупой, это обращение...
Но как же правильно?


 
Reindeer Moss Eater ©   (2005-05-19 14:20) [19]

Сникерсни!

... := @this_pascal_module.DestroyWindow([Main.Wnd]);


 
Grief ©   (2005-05-19 14:21) [20]

как сделать ссылку переменной на ЛЮБУЮ процедуру, не обращая внимания на количество и тип параметров?


 
Reindeer Moss Eater ©   (2005-05-19 14:22) [21]

Ты что, совсем никакой?
Если используешь DesroyWindow из Window.pas, то зачем квадратные скобки?


 
begin...end ©   (2005-05-19 14:25) [22]

> Reindeer Moss Eater ©   (19.05.05 14:20) [19]

> ... := @this_pascal_module.DestroyWindow([Main.Wnd]);

Ну и что это за бред?


 
Reindeer Moss Eater ©   (2005-05-19 14:25) [23]

А что именно непонятно?


 
begin...end ©   (2005-05-19 14:27) [24]

> Reindeer Moss Eater ©   (19.05.05 14:25) [23]

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


 
Eraser ©   (2005-05-19 14:29) [25]

Grief ©   (19.05.05 14:21) [20]
как сделать ссылку переменной на ЛЮБУЮ процедуру, не обращая внимания на количество и тип параметров?


Как и ссылку на что-либо другое. Через указатель.
var
p: pointer;

Только при вызаве надо будет всё равно делать привидение типов.


 
Reindeer Moss Eater ©   (2005-05-19 14:30) [26]

Это не я присваиваю.
Это автор присваивает.
Я лишь понял, что у него в качестве имени процедуры взято имя DestroyWindow из windows.pas.

Отсюда коллизия имен и сообщение об ошибке
Incompatible types "HWND" and "Set"

вот и все.
Я предложил ему уточнить функцию именем модуля.


 
Grief ©   (2005-05-19 14:30) [27]

По порядку. Мне надо реализовать свои кнопки. Кнопка - объект, у которого есть много разных полей - картинка, позиция на экране, enable, visible  и прочая... Среди них есть параметр Proc, определяющий процедуру, которая выполняется при нажатии на эту кнопочку. У процедуры может быть от нуля до бесконечности параметров. Как организовать хранение ссылок на процедуры в полях записи и как эти процедуры вызывать? Причем мне надо сохранять процедуру сразу с параметрами, а загружать с уже сохраненными параметрами. То есть Указать в начале Proc := DestroyWindow(MainWindow) а потом Proc вызывается и закрывается окошко. Как это устроить? Кстати, бес квадратных скобок он говорит, что variable requred. Кроме того, скобки мне подсказали [4] и [8]

скажи свое icq, Reindeer и я подробнее объясню, если не в лом, либо вот моя - 323626768


 
Eraser ©   (2005-05-19 14:33) [28]

Grief ©   (19.05.05 14:30) [27]
У процедуры может быть от нуля до бесконечности параметров.


Перерабатывай алгоритм. Так как ты задумал неполучится.


 
Reindeer Moss Eater ©   (2005-05-19 14:35) [29]

У процедуры может быть от нуля до бесконечности параметров.

Легко заменяется процедурой с одним параметром.
procedure MyProc(AParamList: TStrings);


 
Grief ©   (2005-05-19 14:37) [30]

Совсем? :( У меня уже есть один алгоритм, он зделан так:
var Proc: procedure;
procedure CloseMyWindow;
begin
 destroyWindow(Main.Wnd);
end;
...
Proc := CloseMyDialog;
Proc;
...
Последняя строчка собственно и закрывает окошко.
Как можно избавиться от описания новой процедуры?
Дело в том, что их у меня уже больше сотни и в каждой записано по одной строчке... :(
Хотелось бы улучшить процесс инициализации моих кнопок.
P.S. привидение типов - очень страшное привИдение :))))))))


 
Grief ©   (2005-05-19 14:38) [31]

может тогда примерчик покажешь, Reindeer Moss Eater?


 
Reindeer Moss Eater ©   (2005-05-19 14:43) [32]

Каждая строка в стринглисте - один "параметр" для процедуры.
Какой еще пример нужен?
перевода строки в число когда это надо?


 
Eraser ©   (2005-05-19 14:44) [33]

Grief ©   (19.05.05 14:37) [30]

destroyWindow(Main.Wnd);


И как? AV ещё не разу не вылетела? ;-)

привИдение ;-)

может тогда примерчик покажешь

procedure MyProc(AParams: TStrings);


 
Reindeer Moss Eater ©   (2005-05-19 14:47) [34]

По порядку. Мне надо реализовать свои кнопки. Кнопка - объект, у которого есть много разных полей - картинка, позиция на экране, enable, visible  и прочая... Среди них есть параметр Proc, определяющий процедуру, которая выполняется при нажатии на эту кнопочку. У процедуры может быть от нуля до бесконечности параметров. Как организовать хранение ссылок на процедуры в полях записи

У записи должно быть поле с таким же типом как и свойство OnClick у объекта кнопки. Вот и все.


 
Grief ©   (2005-05-19 14:49) [35]

[32] - А не факт в том, что это будут тока строки или числа, это может быть все, что угодно!


 
Reindeer Moss Eater ©   (2005-05-19 14:53) [36]

И что именно из этого угодного невозможно представить строкой?


 
Reindeer Moss Eater ©   (2005-05-19 14:58) [37]

И вообще.  В этой консерватории все не так.

Допустим ты создашь кнопку и назначишь ей обработчик имеющий много параметров. Откуда берутся эти параметры при нажатии на кнопку?
Очевидно из объекта самой кнопки.
А раз так, то нафига вообще поддержка произвольного кол-ва параметров у обработчика, когда достаточно одного сендера приведенного к типу кнопки?
Все многочисленные параметры будут и так доступны в обработчике.

В общем бред все это.


 
Eraser ©   (2005-05-19 14:59) [38]

Reindeer Moss Eater ©

Во-во! Если уж и проблематично строкой передать, то можно использовать массив Objects для передачи указателя на данные!


 
Grief ©   (2005-05-19 14:59) [39]

а потом перевод как осуществлять? Это будет еще кривее чемвариант с лишними процедурами


 
Reindeer Moss Eater ©   (2005-05-19 15:00) [40]

Бред Бред Бред



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

Текущий архив: 2005.06.06;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.044 c
9-1110394276
Arkafon
2005-03-09 21:51
2005.06.06
GDI


6-1111443454
Villi.GPInet
2005-03-22 01:17
2005.06.06
Команда LIST протокола FTP


14-1116171303
Nic87
2005-05-15 19:35
2005.06.06
Новый дизайн на worlds3d


1-1116576122
Layner
2005-05-20 12:02
2005.06.06
Перевод из числа FLOAT в Single (запись из 4 байт)


14-1116643361
boriskb
2005-05-21 06:42
2005.06.06
Студенты. Прошу помощи :)