![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
var Proc: procedure а дальше что?! [D7, WinXP]
Grief © (2005-05-15 10:18:00)Помогите, пожалуйста, мне необходимо сделать переменную, которая сможет хранить указатели на процедуры с разным количеством параметров.
То есть, например, когда я делаю
var P: procedure;
А затем присваиваю:
P := GetNewLink(1, 1, I);
У меня, понятное дело, вываливается ошибка. Как этого избежать?
Reindeer Moss Eater (2005-05-19 15:00:00) [1]Бред Бред Бред
Grief (2005-05-19 14:59:00) [2]а потом перевод как осуществлять? Это будет еще кривее чемвариант с лишними процедурами
Eraser (2005-05-19 14:59:00) [3]Reindeer Moss Eater ©
Во-во! Если уж и проблематично строкой передать, то можно использовать массив Objects для передачи указателя на данные!
Reindeer Moss Eater (2005-05-19 14:58:00) [4]И вообще. В этой консерватории все не так.
Допустим ты создашь кнопку и назначишь ей обработчик имеющий много параметров. Откуда берутся эти параметры при нажатии на кнопку?
Очевидно из объекта самой кнопки.
А раз так, то нафига вообще поддержка произвольного кол-ва параметров у обработчика, когда достаточно одного сендера приведенного к типу кнопки?
Все многочисленные параметры будут и так доступны в обработчике.
В общем бред все это.
Reindeer Moss Eater (2005-05-19 14:53:00) [5]И что именно из этого угодного невозможно представить строкой?
Grief (2005-05-19 14:49:00) [6][32] - А не факт в том, что это будут тока строки или числа, это может быть все, что угодно!
Reindeer Moss Eater (2005-05-19 14:47:00) [7]По порядку. Мне надо реализовать свои кнопки. Кнопка - объект, у которого есть много разных полей - картинка, позиция на экране, enable, visible и прочая... Среди них есть параметр Proc, определяющий процедуру, которая выполняется при нажатии на эту кнопочку. У процедуры может быть от нуля до бесконечности параметров. Как организовать хранение ссылок на процедуры в полях записи
У записи должно быть поле с таким же типом как и свойство OnClick у объекта кнопки. Вот и все.
Eraser (2005-05-19 14:44:00) [8]Grief © (19.05.05 14:37) [30]
destroyWindow(Main.Wnd);
И как? AV ещё не разу не вылетела? ;-)
привИдение;-)
может тогда примерчик покажешь
procedure MyProc(AParams: TStrings);
Reindeer Moss Eater (2005-05-19 14:43:00) [9]Каждая строка в стринглисте - один "параметр" для процедуры.
Какой еще пример нужен?
перевода строки в число когда это надо?
Grief (2005-05-19 14:38:00) [10]может тогда примерчик покажешь, Reindeer Moss Eater?
Grief (2005-05-19 14:37:00) [11]Совсем? :( У меня уже есть один алгоритм, он зделан так:
var Proc: procedure;
procedure CloseMyWindow;
begin
destroyWindow(Main.Wnd);
end;
...
Proc := CloseMyDialog;
Proc;
...
Последняя строчка собственно и закрывает окошко.
Как можно избавиться от описания новой процедуры?
Дело в том, что их у меня уже больше сотни и в каждой записано по одной строчке... :(
Хотелось бы улучшить процесс инициализации моих кнопок.
P.S. привидение типов - очень страшное привИдение :))))))))
Reindeer Moss Eater (2005-05-19 14:35:00) [12]У процедуры может быть от нуля до бесконечности параметров.
Легко заменяется процедурой с одним параметром.
procedure MyProc(AParamList: TStrings);
Eraser (2005-05-19 14:33:00) [13]Grief © (19.05.05 14:30) [27]
У процедуры может быть от нуля до бесконечности параметров.
Перерабатывай алгоритм. Так как ты задумал неполучится.
Grief (2005-05-19 14:30:00) [14]По порядку. Мне надо реализовать свои кнопки. Кнопка - объект, у которого есть много разных полей - картинка, позиция на экране, enable, visible и прочая... Среди них есть параметр Proc, определяющий процедуру, которая выполняется при нажатии на эту кнопочку. У процедуры может быть от нуля до бесконечности параметров. Как организовать хранение ссылок на процедуры в полях записи и как эти процедуры вызывать? Причем мне надо сохранять процедуру сразу с параметрами, а загружать с уже сохраненными параметрами. То есть Указать в начале Proc := DestroyWindow(MainWindow) а потом Proc вызывается и закрывается окошко. Как это устроить? Кстати, бес квадратных скобок он говорит, что variable requred. Кроме того, скобки мне подсказали [4] и [8]
скажи свое icq, Reindeer и я подробнее объясню, если не в лом, либо вот моя - 323626768
Reindeer Moss Eater (2005-05-19 14:30:00) [15]Это не я присваиваю.
Это автор присваивает.
Я лишь понял, что у него в качестве имени процедуры взято имя DestroyWindow из windows.pas.
Отсюда коллизия имен и сообщение об ошибке
Incompatible types 'HWND' and 'Set'
вот и все.
Я предложил ему уточнить функцию именем модуля.
Eraser (2005-05-19 14:29:00) [16]Grief © (19.05.05 14:21) [20]
как сделать ссылку переменной на ЛЮБУЮ процедуру, не обращая внимания на количество и тип параметров?
Как и ссылку на что-либо другое. Через указатель.
var
p: pointer;
Только при вызаве надо будет всё равно делать привидение типов.
begin...end (2005-05-19 14:27:00) [17]> Reindeer Moss Eater © (19.05.05 14:25) [23]
Непонятно, с какого перепугу при присваивании значения переменной процедурного типа можно указывать фактические или формальные параметры.
Reindeer Moss Eater (2005-05-19 14:25:00) [18]А что именно непонятно?
begin...end (2005-05-19 14:25:00) [19]> Reindeer Moss Eater © (19.05.05 14:20) [19]
> ... := @this_pascal_module.DestroyWindow ([Main.Wnd]);
Ну и что это за бред?
Reindeer Moss Eater (2005-05-19 14:22:00) [20]Ты что, совсем никакой?
Если используешь DesroyWindow из Window.pas, то зачем квадратные скобки?