这是我编写得很好的简单代码,但会引发访问冲突。它进入MD程序并且调试器显示一些X和Y值,但在退出程序AV后发生。希望有人可以提供帮助。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
form1.caption:= inttostr(x)+ ' '+ inttostr(y);
end;
procedure TForm1.FormCreate(Sender: TObject);
function MakeMethod(data, code: pointer): TMethod;
begin
result.Data:= data;
result.Code:= code;
end;
begin
panel1.OnMouseDown:= TMouseEvent(MakeMethod(nil, @MD));
end;
end.
由于
答案 0 :(得分:5)
hideLoader()
签名应包含其他隐藏参数;它解决了AV问题。
MD
答案 1 :(得分:1)
尝试将MD设为表单类的成员。按以下方式编辑示例: 在类定义中:
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
稍后在您的代码中,请确保输入MD方法的所有者,如下所示:
procedure TForm1.MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
最后,在将此事件处理程序分配给组件时,您所要做的就是:
panel1.OnMouseDown:= MD;
我不知道你的意图是什么,但这就是你在运行时如何处理事件处理程序。