Delphi 如何读*.dfm文件的,是否用流的方式?

解决方案 »

  1.   

    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 }
      

  2.   

    dfm文件通常也是以文本格式保存的(你可以用记事本程序打开dfm文件查看),Delphi读取dfm文件后再解释为相应的窗体和控件
             ________________________欢迎访问和宣传我的论坛http://hthunter.vicp.net/
      

  3.   

    dfm文件以前默认是二进制的,现在默认是纯文本了.你可以通过在窗体是点右键,设TEXT DFM选项来进行选择