请问有什么办法可以屏蔽掉某个控件所有的事件?(200分)

  • 主题发起人 主题发起人 forgot2002
  • 开始时间 开始时间
F

forgot2002

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我们想屏蔽Button1的Onclick事件,只需要写button1.OnClick := nil;即可,问题是如果
我想把所有的事件都屏蔽呢?是不是要用到Rtti呢?请问应该如何实现?
 
button1.enabled:=false;
 
方法1: 从TButton派生一个新类,重载WndProc函数,过虑你不想要的消息
方法2: 用TApplicationEvents
加入以下代码
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.hwnd = Button1.Handle then
begin
if msg.message = WM_LBUTTONUP then
begin
handled := true;
Mouse.Capture := 0;
end;
end;
end;
 
谢谢大家的回答,但都不符合我的要求,我已经自己解决了这个问题,这是我的代码,分数我回收了,希望大家见谅。
//使用 GetPropCount 可取得控件的的属性计数:

function GetPropCount(Instance: TPersistent): Integer;
var
Data: PTypeData;
begin
Data := GetTypeData(Instance.Classinfo);
Result := Data^.PropCount;
end;

//使用 GetPropName 可取得属性的名称:

function GetPropName(Instance: TPersistent; Index: Integer): string;
var
PropList: PPropList;
PropInfo: PPropInfo;
Data: PTypeData;
begin
Result := '';
Data := GetTypeData(Instance.Classinfo);
GetMem(PropList, Data^.PropCount * Sizeof(PPropInfo));
try
GetPropInfos(Instance.ClassInfo, PropList);
PropInfo := PropList^[Index];
Result := PropInfo^.Name;
finally
FreeMem(PropList, Data^.PropCount * Sizeof(PPropInfo));
end;
end;

procedure CloseForm(Form: TForm);
var
Index: Integer;
src: TPersistent;
SrcPropInfo: PPropInfo;
MyMethod: TMethod;
j: integer;
begin
with Form do
begin
for j := 0 to ComponentCount - 1 do
begin
src := TPersistent(Components[j]);
for Index := 0 to GetPropCount(Src) - 1 do
begin
SrcPropInfo := GetPropInfo(Src.ClassInfo, GetPropName(Src, Index));
if (srcPropInfo <> nil) and (SrcPropInfo^.PropType^.Kind = tkMethod)
then
begin
MyMethod := GetMethodProp(Src, SrcPropInfo);
if (Assigned(MyMethod.Data)) and (Assigned(MyMethod.Code)) then
begin
MyMethod.Data := nil;
MyMethod.Code := nil;
SetMethodProp(Src, SrcPropInfo, MyMethod);
end;
end;
end;
end;
end;
end;
 
接受答案了.
 

Similar threads

后退
顶部