Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[362] 스킨을 이용하여 폼의 모양 바꾸기 - 4
첫눈 [hadugo] 279 읽음    2017-01-04 14:09
지난 시간에 올렸던 LoadComponentFromBinFile()함수에 새로 생성될 폼의 객체들을 등록하는 코드를 추가해 보겠습니다.
procedure LoadComponentFromBinFile(Component: TComponent; Const FileName: String);
var
  MemStream : TMemoryStream;
  i: Integer;
begin
  if not Assigned(Component) then Exit;
  if NOT FileExists(FileName) then Exit;

  RegisterClass(TEdit);
  RegisterClass(TButton);
 
  try
    MemStream := TMemoryStream.Create;
    MemStream.LoadFromFile(FileName);
    MemStream.Position := 0;
    MemStream.ReadComponent(Component);
    Application.InsertComponent(Component);
  finally
    FreeAndNil(MemStream);
  end;
end;
 

이렇게 해야 하는데 스킨에 사용될 폼에 어떤 객체들이 있을지를 미리 예측할 수 없기 때문에

  RegisterClass(TEdit);
  RegisterClass(TButton);

이 코드를 자동으로 생성해 주어야 합니다.
이 일을 하기 위해 함수 하나를 더 만들어야 겠습니다.


procedure RegisterComponentFromBin(const BinFile: String);
Var
  ClassList : TStringList;
Begin
  ClassList := TStringList.Create;
  GetClassListFromBinFile(BinFile, ClassList);
  RegisterComponentFromList(ClassList);
  FreeAndNil(ClassList);
End;


이렇게 만들어 주고
procedure LoadComponentFromBinFile(Component: TComponent; Const FileName: String);
var
  MemStream : TMemoryStream;
  i: Integer;
begin
  if not Assigned(Component) then Exit;
  if NOT FileExists(FileName) then Exit;

  RegisterComponentFromBin(FileName);
 
  try
    MemStream := TMemoryStream.Create;
    MemStream.LoadFromFile(FileName);
    MemStream.Position := 0;
    MemStream.ReadComponent(Component);
    Application.InsertComponent(Component);
  finally
    FreeAndNil(MemStream);
  end;
end;

이렇게 LoadComponentFromBinFile() 함수 안에   RegisterComponentFromBin()를 추가해 주면 되는데요.

RegisterComponentFromBin() 함수 안에서 사용되는
GetClassListFromBinFile() 함수와  RegisterComponentFromList()를 또 만들어야 겠습니다.

GetClassListFromBinFile()함수는 Bin파일 안에서 사용된 객체들이 어떤 것이 있는지를 검사하여 TStringList에 저장하는 함수구요.
TStringList에 저장된 객체들을 RegisterClass()로 등록해 주는 함수입니다.

다음 시간에는
GetClassListFromBinFile() 함수와  RegisterComponentFromList()를 보겠습니다.

+ -

관련 글 리스트
362 스킨을 이용하여 폼의 모양 바꾸기 - 4 첫눈 279 2017-01-04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.