Учитывая TForm
с TListBox
на нем, следующие виды работ:Как передать вложенную процедуру метода в качестве параметра?
procedure TForm1.FormCreate(Sender: TObject);
procedure _WorkOnListBox;
begin
ListBox.Items.Append('Test');
end;
begin
_WorkOnListBox;
end;
Как делает следующее:
procedure TForm1.DoWithoutListBoxEvents(AProc: TProc);
begin
ListBox.Items.BeginUpdate;
try
AProc;
finally
ListBox.Items.EndUpdate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DoWithoutListBoxEvents(procedure
begin
LayersListBox.Items.Append('Test');
end);
end;
Но следующий не будет:
procedure TForm1.FormCreate(Sender: TObject);
procedure _WorkOnListBox;
begin
ListBox.Items.Append('Test');
end;
begin
DoWithoutListBoxEvents(_WorkOnListBox);
end;
я получаю E2555 Cannot capture symbol '_WorkOnListBox'
. Зачем? Есть ли способ заставить DoWithoutListBoxEvents
работать без использования анонимной процедуры? Хотя я думаю, что он выглядит элегантно, я стараюсь оставаться совместимым с FPC.
@KromStern FreePascal совместимость –
Спасибо за разъяснение. Добавлено тег для вас :-) – Kromster