Delphi 如何传递方法';是否将嵌套过程作为参数?
给定一个带有Delphi 如何传递方法';是否将嵌套过程作为参数?,delphi,delphi-2010,freepascal,Delphi,Delphi 2010,Freepascal,给定一个带有t列表框的t表单,以下操作有效: procedure TForm1.FormCreate(Sender: TObject); procedure _WorkOnListBox; begin ListBox.Items.Append('Test'); end; begin _WorkOnListBox; end; 以下方面也是如此: procedure TForm1.DoWithoutListBoxEvents(AProc: TProc); begin
t列表框的t表单
,以下操作有效:
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无法捕获符号“\u worknlistbox”
。为什么?有没有办法让DoWithOutlostBoxeEvents
在不使用匿名过程的情况下工作?虽然我觉得它看起来很优雅,但我还是努力保持FPC的兼容性。DoWithoutEvents()
将TProc
作为输入:
type
TProc = procedure;
只有独立的非类过程和匿名过程可以分配给TProc
<代码>\u workinfo
不是这两个,而是一个本地过程。本地过程具有特殊的编译器处理,将其绑定到其父级堆栈框架。因此,\u worknform
与TProc
不兼容DoWithoutEvents()
将TProc
作为输入:
type
TProc = procedure;
只有独立的非类过程和匿名过程可以分配给
TProc
<代码>\u workinfo不是这两个,而是一个本地过程。本地过程具有特殊的编译器处理,将其绑定到其父级堆栈框架。因此,\u worknform
与TProc
不兼容。我可以使用任何类型吗?不适用于本地过程,不。间接调用本地过程是不安全的(调用不会在调用站点正确设置),所以不要尝试这样做。本地过程意味着直接调用,以某种方式编译器可以看到它,从而正确设置调用。这与将本地过程用作API回调(错误的调用设置)是危险的。不要这样做。有什么类型我可以使用吗?不适用于本地过程,不。间接调用本地过程是不安全的(调用不会在调用站点正确设置),所以不要尝试这样做。本地过程意味着直接调用,以某种方式编译器可以看到它,从而正确设置调用。这与将本地过程用作API回调(错误的调用设置)是危险的。请不要这样做。@KromStern FreePascal相容性银行澄清。为您添加了标签:-)@KromStern FreePascal compatibilitytanks以供澄清。为您添加了标签:-)