메모리 스트림 두개가 필요함.
procedure GetTextFromBinaryFile(FileName: String; sList: TStringList);
var
mStream, mStream2: TMemoryStream;
begin
mStream:=TMemoryStream.Create;
mStream2:=TMemoryStream.Create;
try
mStream.LoadFromFile(FileName);
mStream.Position:=0;
mStream.ReadResHeader;
ObjectBinaryToText(mStream, mStream2);
mStream2.Position:=0;
sList.LoadFromStream(mStream2);
finally
FreeAndNil(mStream);
FreeAndNil(mStream2);
end;
end;
*** dfm 파일은 텍스트도 있고 바이너리도 있다.
어느 것이든 상관없이 Component의 Name과 ClassName 을 추출하는 함수를 만들어 봤다 ***
매개변수 중 ComponentsList 에 Memo1.Lines 같은 걸 넣어서 바로 눈으로 확인해보자.
procedure GetComponents(FileName: String; ComponentsList: TStrings);
var
mStream, mStream2: TMemoryStream;
sList: TStringList;
i: Integer;
var
mStream, mStream2: TMemoryStream;
sList: TStringList;
i: Integer;
begin
mStream:=TMemoryStream.Create;
mStream2:=TMemoryStream.Create;
sList:=TStringList.Create;
try
mStream.LoadFromFile(FileName);
mStream.Position:=0;
mStream:=TMemoryStream.Create;
mStream2:=TMemoryStream.Create;
sList:=TStringList.Create;
try
mStream.LoadFromFile(FileName);
mStream.Position:=0;
// 바이너리
if (Byte(mStream.Memory^)=$FF) then begin
mStream.ReadResHeader;
ObjectBinaryToText(mStream, mStream2);
mStream2.Position:=0;
sList.LoadFromStream(mStream2);
end
// 텍스트
else sList.LoadFromFile(FileName);
if (Byte(mStream.Memory^)=$FF) then begin
mStream.ReadResHeader;
ObjectBinaryToText(mStream, mStream2);
mStream2.Position:=0;
sList.LoadFromStream(mStream2);
end
// 텍스트
else sList.LoadFromFile(FileName);
for i:=0 to sList.Count-1 do begin
if Pos('object ', sList[i])>0 then begin
sList[i]:=StringReplace(sList[i], 'object ', '', [rfReplaceAll]);
ComponentsList.Add(sList[i]);
end;
end;
finally
FreeAndNil(sList);
FreeAndNil(mStream);
FreeAndNil(mStream2);
end;
end;
if Pos('object ', sList[i])>0 then begin
sList[i]:=StringReplace(sList[i], 'object ', '', [rfReplaceAll]);
ComponentsList.Add(sList[i]);
end;
end;
finally
FreeAndNil(sList);
FreeAndNil(mStream);
FreeAndNil(mStream2);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] TPopupMenu 에 관하여 (0) | 2009.04.18 |
---|---|
[Delphi] HTML 페이지의 태그 사이를 유랑하기 (0) | 2009.04.18 |
[Delphi] TForm.Components[i] 사용 시 주의점 (0) | 2009.04.18 |
[Delphi] 웹페이지에서 텍스트 긁어와서 뒤지기 (0) | 2009.04.18 |
[Delphi] 웹페이지의 html 긁어와서 뒤지기 (0) | 2009.04.18 |