구조체(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;
끝~
RecordTest.zip