Я относительно новичок в Pascal, и, хотя у меня есть хорошее понимание языка, все еще есть некоторые вещи, которые я не могу понять, как реализовать. Я столкнулся с этой проблемой, и после нескольких часов самостоятельных попыток поиска подобных случаев в Интернете я ничего не нашел. Я надеюсь, что этот вопрос справедлив, потому что, честно говоря, я не знаю, как это понять.
Вот в чем дело.
У меня есть приложение, которое динамически создает текстовые поля (в данном случае TextEdits) и добавляет их на панель для отображения. Дело в том, что мне нужно выполнить некоторые процедуры для вновь созданных элементов. Я добавил новую процедуру в свое приложение (это только для пояснения):
procedure Demo_Procedure(i: integer, a: String);
Затем я приступил к «разработке» своей процедуры под частью «реализации» формы.
procedure Demo_Procedure(i: integer, a: String);
begin
ShowMessage(a, ' ' ,i);
end;
Теперь для моих динамически созданных элементов я пытаюсь установить событие «OnKeyDow» для запуска моей новой процедуры (это то, чего я не знаю, а- возможно ли это сделать, или б- как это сделать)
NewlyButton.OnClick:= Demo_Procedure(5, 'Hi');
Я получаю разные ошибки в зависимости от того, как я вызываю свою процедуру. Например:
Если я сделаю это так: Demo_Procedures(5, 'Привет'), он скажет:
Ошибка: несовместимые типы: получен "нетипизированный" ожидаемый "процедурный тип переменной процедуры (TObject, var Word, TShiftState) объекта; Регистрация>"
Теперь, исследуя вокруг, я обнаружил, что некоторые люди, которые помещают «@» перед вызовом метода, единственная разница в том, что на этот раз вместо того, чтобы сказать «нетипизированный», он говорит, что он получил «тип процедуры переменной процедуры (AnsiString ,LongInt) объекта" и что он ожидал того же, что и раньше (procedure(TObject,var> Word,Tshift...etc)
Может кто-нибудь помочь мне здесь? Я действительно потерян, поэтому любая помощь будет принята с благодарностью. Заранее спасибо :)
lambda
функции, которые, в свою очередь, могли бы использоваться как граждане 1-го класса вместе с другими... of object
функциями. Вероятно, вы пытаетесь понять шаблон команды GoF. - person xmojmr   schedule 04.09.2014