구조체(Record) 많이 사용하시죠?
생각보다 구조체를 사용하는 방법이 다양해서 소개하려 합니다.
우선 간단한 샘플
연/월/일 형식으로 데이터 입력 후 한번에 데이터 저장하는 코드입니다.
type TRecordType = (rtData, rtStructure); TDateRec = record case TRecordType of rtData: (Data: array[0..5] of Byte); rtStructure: (Year, Month, Day: Word); end;위와 같이 구조체가 정의 되어 있습니다.
2가지 타입(rtData, rtStructure)로 사용해 봅니다.
| rtStructure - 연월일 형식으로 입력
procedure TForm2.btnAddClick(Sender: TObject); var Rec: TDateRec; begin DecodeDate(dtpDate.Date, Rec.Year, Rec.Month, Rec.Day); AddDate(Rec); end;
| rtData - 데이터 형식으로 저장
procedure TForm2.AddDate(ADate: TDateRec); var FilePath: string; FS: TFileStream; begin FilePath := ExtractFilePath(Application.ExeName) + 'test.dat'; FS := TFileStream.Create(FilePath, IfThen(FileExists(FilePath), fmOpenReadWrite, fmCreate)); try FS.Position := FS.Size; FS.Write(ADate.Data, SizeOf(ADate.Data)); finally FS.Free; end; end;
위의 2가지 코드대로 하나의 구조체를 다양한 방식으로 사용가능합니다.
TRecordType 은 제가 임의로 2개를 정의한 것이므로, 여러개로 나누어 사용하여도 됩니다.
또한, 굳이 위 구조체가 아니어도 아래와 같은 코드로도 사용 가능합니다.
| Messages.pas의 window message record
TMessage = packed record Msg: Cardinal; case Integer of 0: ( WParam: WPARAM; LParam: LPARAM; Result: LRESULT); 1: ( WParamLo: Word; WParamHi: Word; LParamLo: Word; LParamHi: Word; ResultLo: Word; ResultHi: Word); end;끝~