Я могу использовать закрытие на обработчике событий (т.е., TButton OnClick)

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

Вы можете использовать соединение, чтобы сгладить столбцы, вместо joinWith, для которого вы можете указать столбец, для которого вы хотите отбросить дубликаты.

14
задан Wouter van Nifterick 4 January 2009 в 06:20
поделиться

2 ответа

В предыдущих версиях Delphi Вы могли использовать обычную процедуру в качестве обработчика событий путем добавления скрытого сам указатель на параметры и трудно преобразовать тип его:

procedure MyFakeMethod(_self: pointer; _Sender: TObject);
begin
  // do not access _self here! It is not valid
  ...
end;

...

var
  Meth: TMethod;
begin
  Meth.Data := nil;
  Meth.Code := @MyFakeMethod;
  Button1.OnClick := TNotifyEvent(Meth);
end;

Я не уверен, что вышеупомянутое действительно компилирует, но оно должно дать Вам общее представление. Я сделал это ранее, и это работало на обычные процедуры. Так как я не знаю то, что кодирует компилятор, генерирует для закрытий, я не могу сказать, будет ли это работать на них.

4
ответ дан 1 December 2019 в 12:53
поделиться

Превосходный вопрос.

Насколько я знаю, не возможно сделать в текущей версии Delphi. Это - много неудачника, так как те анонимные процедуры были бы замечательными иметь для того, чтобы быстро настроить обработчики событий объекта, например, при установке тестовых приспособлений в xUnit виде автоматической среды тестирования.

Должно быть два пути к CodeGear для реализования этой опции:

1: Допускайте создание анонимных методов. Что-то вроде этого:

Button1.OnClick := procedure( sender : tobject ) of object begin
  ...
end;

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

2: С другой стороны, можно было позволить Типам событий принимать и методы и процедуры, пока они совместно используют определенную подпись. Таким образом Вы могли создать обработчик событий путем, Вы хотите:

Button1.OnClick := procedure( sender : tobject ) begin
  ...
end;

В моих глазах это - лучшее решение.

5
ответ дан 1 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: