动态创建了TScrollBar,在设置 OnChange 事件时,触发函数可以响应,
但是(Sender is TScrollBar) 里,Sender 的值为 nil,造成无法提取TScrollBar的信息,求助~procedure TForm1.FormCreate(Sender: TObject);
var
Method: TMethod;
begin
Method.Data := nil;
Method.Code := @ScrollBarChange; ScrollBar:= TScrollBar.Create(nil);
ScrollBar.Parent := Panel1;
ScrollBar.OnChange := TNotifyEvent(Method);
end;procedure ScrollBarChange(Sender: TObject);
var
lcIndex:integer;
begin
lcIndex:= -1;
if (Sender is TScrollBar) then // Sender 一直为 nil ???
begin
lcIndex:= (Sender as TScrollBar).Position;
end;
Showmessage(inttostr(lcIndex));
end;
但是(Sender is TScrollBar) 里,Sender 的值为 nil,造成无法提取TScrollBar的信息,求助~procedure TForm1.FormCreate(Sender: TObject);
var
Method: TMethod;
begin
Method.Data := nil;
Method.Code := @ScrollBarChange; ScrollBar:= TScrollBar.Create(nil);
ScrollBar.Parent := Panel1;
ScrollBar.OnChange := TNotifyEvent(Method);
end;procedure ScrollBarChange(Sender: TObject);
var
lcIndex:integer;
begin
lcIndex:= -1;
if (Sender is TScrollBar) then // Sender 一直为 nil ???
begin
lcIndex:= (Sender as TScrollBar).Position;
end;
Showmessage(inttostr(lcIndex));
end;
ScrollBar.OnChange := ScrollBarChange;
procedure TForm1.ScrollBarChange(Sender: TObject);
方法2:使用指针,@ScrollBar.OnChange := @ScrollBarChange;
普通过程的过程名指向其入口地址,而对象方法指向VMT(或DMT),但可通过指针赋值
此法不太安全,在运行时有一定风险