TPersistent 에서 상속된 클래스만 가능한 방법이다.
DefineProperties 메소드를 구현해주면 된다.
TFiler 를 매개변수로 받고 DefineProperty 메소드를 이용해서
Load, Write, CanDo 메소드를 인자 값으로 넣어준다.
Load 메소드의 인자 값은 TReader 형태
Write 메소드의 인자 값은 TWriter 형태
CanDo 메소드의 인자 값은 TFiler 형태로 받고
CanDo 에서는 Filer->Ancestor 와 비교해서 가능 여부를 반환하고
나머지는 각 인자 값으로 넘어온 객체를 이용해 Load/Write 하면 된다.
-------------------------------------------------------------------
복합적인 Property 의 경우 Binary 로 저장이 가능하다.
Binary 저장은 다음과 같다.
Filer->DefineBinaryProperty("Cells", ReadCells, WriteCells, DoCells(Filer));
배열로 잡혀진 객체를 저장하는데 이 코드를 썼는데, 객체에 Read/Write 메소드를 구현하여,
ReadCells, WriteCells 에서는 이를 호출만 하게 해주면된다.
객체의 Read/Write 메소드 구현은 파일 저장과 같다.
TStream 을 받아서 저장을 하게 되는데
TTreeView 의 경우는 자료 저장용 구조체를 따로 만들어 값을 넣고 Read/Write 를 한다.
이 때, 주의할 점은 문자열 처리다.
문자열은 가변길이이기 때문에 구조체의 맨 마지막에 와야한다.
Delphi 의 string 과 C++Builder 의 AnsiString 은 다른 형태라 같은 루틴을 사용할 수 없다.
Delphi 의 코드를 보면 255 크기의 string 변수를 생성하고 값을 대입하고 크기를 구해서 크기와 값을 저장하고 읽어온다.
C++Builder 에서는 클래스를 바로 저장할 수 없기에 (포인터 값이 저장되어 난리난다.)
char [255] 배열을 생성해서 비슷한 구현을 하면된다.
다만 Write 시에는 strncpy 로 값을 복사해 줘야 하지만, Read 시에는 그냥 대입하면 자동 String 변환이 된다.
DefineProperties 메소드를 구현해주면 된다.
TFiler 를 매개변수로 받고 DefineProperty 메소드를 이용해서
Load, Write, CanDo 메소드를 인자 값으로 넣어준다.
Load 메소드의 인자 값은 TReader 형태
Write 메소드의 인자 값은 TWriter 형태
CanDo 메소드의 인자 값은 TFiler 형태로 받고
CanDo 에서는 Filer->Ancestor 와 비교해서 가능 여부를 반환하고
나머지는 각 인자 값으로 넘어온 객체를 이용해 Load/Write 하면 된다.
-------------------------------------------------------------------
복합적인 Property 의 경우 Binary 로 저장이 가능하다.
Binary 저장은 다음과 같다.
Filer->DefineBinaryProperty("Cells", ReadCells, WriteCells, DoCells(Filer));
배열로 잡혀진 객체를 저장하는데 이 코드를 썼는데, 객체에 Read/Write 메소드를 구현하여,
ReadCells, WriteCells 에서는 이를 호출만 하게 해주면된다.
객체의 Read/Write 메소드 구현은 파일 저장과 같다.
TStream 을 받아서 저장을 하게 되는데
TTreeView 의 경우는 자료 저장용 구조체를 따로 만들어 값을 넣고 Read/Write 를 한다.
이 때, 주의할 점은 문자열 처리다.
문자열은 가변길이이기 때문에 구조체의 맨 마지막에 와야한다.
Delphi 의 string 과 C++Builder 의 AnsiString 은 다른 형태라 같은 루틴을 사용할 수 없다.
Delphi 의 코드를 보면 255 크기의 string 변수를 생성하고 값을 대입하고 크기를 구해서 크기와 값을 저장하고 읽어온다.
C++Builder 에서는 클래스를 바로 저장할 수 없기에 (포인터 값이 저장되어 난리난다.)
char [255] 배열을 생성해서 비슷한 구현을 하면된다.
다만 Write 시에는 strncpy 로 값을 복사해 줘야 하지만, Read 시에는 그냥 대입하면 자동 String 변환이 된다.
'Windows > RAD Studio' 카테고리의 다른 글
| [Del] Algorithms (0) | 2008.04.25 |
|---|---|
| [RAD] 문자열에서 문자를 제거한 숫자를 변환하기 (0) | 2008.04.19 |
| [RAD] GExperts 의 Debug window 사용하기 (0) | 2008.04.17 |
| [C++] 2의 배수에 의한 나눗셈 연산없이 몫/나머지 구하기 (struct, union, bit-field) (0) | 2008.04.17 |
| [BCB] PosEx 코드 변환 (Delphi to C++Builder) (0) | 2008.04.16 |