http://expert.csdn.net/Expert/topic/2960/2960181.xml?temp=.3938715參考, 類似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; { IsDynamicControl }
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; { IsDynamicControl }
________________________欢迎访问和宣传我的论坛http://hthunter.vicp.net/