您现在的位置:首页 >> VCL >> VCL >> 内容

如何判断一个控件(TControl)是否是动态创建出来的

时间:2011/9/3 16:24:36 点击:

  核心提示:functionIsDynamicControl(mControl:TControl):Boolean; var vHandle:THandle; vResourceName:PChar; vReso...

function IsDynamicControl(mControl: TControl): Boolean;
var
  vHandle: THandle;
  vResourceName: PChar;
  vResourceStream: TResourceStream;
  vMemoryStream: TMemoryStream;
  I: Integer;
begin
  Result := True;
  if not Assigned(mControl) then Exit; //nil算是动态的吧~~
  if mControl.Name = '' then Exit; //Name为空是动态的!~~
  if not Assigned(mControl.Owner) then Exit; //没有Owner是动态的!~~
  vResourceName := PChar(string(mControl.Owner.ClassName));
  vHandle := FindResource(HInstance, vResourceName, RT_RCDATA);
  if vHandle = 0 then Exit;
  vResourceStream :=
    TResourceStream.Create(HInstance, PChar(vResourceName), RT_RCDATA);
  vMemoryStream := TMemoryStream.Create;
  with TStringList.Create do try
    ObjectBinaryToText(vResourceStream, vMemoryStream);
    vMemoryStream.Position := 0;
    LoadFromStream(vMemoryStream);
    vHandle := 0;
    while Pos(#32#32, Text) > 1 do
      Text := StringReplace(Text, #32#32, #32, [rfReplaceAll]);
    for I := 0 to Count - 1 do
      if Pos('object ' + mControl.Name + ':', Strings[I]) in [1, 2] then begin
        vHandle := I + 1;
        Break;
      end;
    if vHandle = 0 then Exit;
  finally
    Free;
    vResourceStream.Free;
    vMemoryStream.Free;
  end;

  Result := False;
end;

//调用范例

procedure TForm1.FormCreate(Sender: TObject);
var
  vButton: TButton;
begin
  vButton := TButton.Create(Self);
  vButton.Caption := 'hello';
  vButton.Name := 'ButtonHello';
  Caption := BoolToStr(IsDynamicControl(vButton), True);
end;

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2020 版权所有 All Rights Reserved.
  • 沪ICP备05001939号