Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何在继承的调用后停止执行?_Delphi_Delphi Xe7_Onmousedown_Inherited - Fatal编程技术网

Delphi 如何在继承的调用后停止执行?

Delphi 如何在继承的调用后停止执行?,delphi,delphi-xe7,onmousedown,inherited,Delphi,Delphi Xe7,Onmousedown,Inherited,我使用TMS中的TAdvGlowButton按钮控件,在MouseDown上默认设置Down属性为true。我希望能够在需要时阻止将此属性设置为True。 MouseDown上的执行流在类的MouseDown过程中启动: procedure TAdvCustomGlowButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); ... begin inherited; // Calls my loc

我使用TMS中的
TAdvGlowButton
按钮控件,在
MouseDown
上默认设置
Down
属性为true。我希望能够在需要时阻止将此属性设置为True。 MouseDown上的执行流在类的MouseDown过程中启动:

procedure TAdvCustomGlowButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
...
begin
  inherited; // Calls my local OnMouseDown method
  ...        // <- I would like to skip/cancel/stop execution after inherited call, so it never gets to Down := True line
  Down = True; 
  ...

end;
程序TAdvCustomGlowButton.MouseDown(按钮:TMouseButton;Shift:TShiftState;X,
Y:整数);
...
开始
继承的;//调用我的本地OnMouseDown方法

... // 您可以引发异常。@SertacAkyuz,如果我“引发异常。创建('Stop flow…');”异常是在最初的MouseDown过程中处理的,我无法控制如何处理该异常。这就是您的想法吗?抛出异常是执行您要求的操作的唯一方法(尝试通过
SysUtils.Abort()
引发
EAbort
,较低级别的VCL处理程序默认情况下将忽略它),而无需修改
TAdvCustomGlowButton
本身,也无需派生覆盖
MouseDown()的自定义类
方法使用您自己的逻辑,并且从不调用继承的
方法。如果我派生自己的自定义类并重写MouseDown方法,我是否仍然可以调用原始类,因为它包含大部分时间都应该执行的代码,但不是所有时间都执行?这感觉不是正确的解决方案。根本问题是什么。您可以引发异常。@SertacAkyuz,如果我“引发异常。创建('Stop flow…');”异常是在最初的MouseDown过程中处理的,我无法控制如何处理该异常。这就是您的想法吗?抛出异常是执行您要求的操作的唯一方法(尝试通过
SysUtils.Abort()
引发
EAbort
,较低级别的VCL处理程序默认情况下将忽略它),而无需修改
TAdvCustomGlowButton
本身,也无需派生覆盖
MouseDown()的自定义类
方法使用您自己的逻辑,并且从不调用继承的
方法。如果我派生自己的自定义类并重写MouseDown方法,我是否仍然可以调用原始类,因为它包含大部分时间都应该执行的代码,但不是所有时间都执行?这感觉不是正确的解决方案。根本问题是什么。
procedure TForm1.AdvGlowButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('Local Mouse Down');
  if True then
    AdvGlowButton1.OnMouseDown:=nil; //<- I would like to stop execution 
end;