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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.012 c
14-1116617554
Sergey Masloff
2005-05-20 23:32
2005.06.06
Я в отпуске. Даже не верится... Отгуливаю за 2002 г. ;-)


14-1116629152
Palladin
2005-05-21 02:45
2005.06.06
Как вам SOAD - Mezmerize, Vol. 1 aka Soldier side ?


9-1110489198
Домовенок
2005-03-11 00:13
2005.06.06
[GLScene] Быстрое обращение к объектам


14-1116335712
McSimm
2005-05-17 17:15
2005.06.06
Внимание! Сайт переезжает на новый хостинг.


1-1116582026
mnx
2005-05-20 13:40
2005.06.06
Косвенная команда





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