我怎样才能访问先前从HTTPRIO.OnBeforeExecute
事件中分配的HTTPRIO.Tag
?可以吗?
假设我有这样的东西:
procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string; SOAPRequest: TStream);
begin
if THHPRIO(Sender).Tag = 99 then
...some code...
end;
但是我在任何THTTPRIO
事件上都没有Sender
。
3条答案
按热度按时间wfypjpf41#
由于您要将事件分配给多个
THTTPRIO
对象,但无法访问事件中的Sender
参数(THTTPRIO
作者的设计不佳),因此一种解决方法是使用TMethod
record操作事件处理程序的Self
指针,使其指向THTTPRIO
对象而不是TForm1
对象,例如:然后,您可以在事件内部对
Self
进行类型转换,例如:或者,您可以使用独立过程(或
class static
方法),并为Self
指针指定显式参数,例如:型
qyzbxkaa2#
虽然雷米的解决方案有效,但将代码留在
TForm1
中会使您面临在TForm1.HTTPRIOBeforeExecute
中意外引用TForm1
中的字段的风险,而且由于“Self”不再是TForm 1,这将导致内存崩溃/损坏。我个人会使用以下方法:
只要您不在
THTTPRIOMethodHolder
中添加字段,并且HTTPRIOBeforeExecute
不是虚拟的,这就可以工作。hrirmatl3#
实际上,我并没有将代码留在TForm1中。我做了如下操作:
例如,在HTTPRIOBeforeExecute过程中,我这样做:
这正如预期的那样工作。我这样做对吗?谢谢