در این مقاله به مبحث رکوردها در دلفی و چگونگی ساخت و استفاده از آنها میپردازیم.
type recordTypeName = record fieldList1: type1; ... fieldListn: typen; end
پس از اینکه نوع رکورد ایجاد شد، باید متغییرهایی از نوع این رکورد تعریف واز آنها استفاده کرد. برای تعریف متغییر نوع رکورد به صورت زیر عمل میشود:
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;
var
Record1, Record2: TDateRec;
هنگام کار با یک رکورد برای دستیابی به میدانهای آن، از نماد نقطه استفاده میکنیم:
Record1.Year := 1904; Record1.Month := Jun; Record1.Day := 16;
همچنین میتوان یک رکورد را در یک رکورد دیگر کپی کرد بدون اینکه با خطائی مواجه شویم. شما همچنین میتوانید متغییرهای از نوع رکوردهای خود را به صورت مستقیم تعریف کنید:
var S: record Name: string; Age: Integer; end;
رکوردهای با طول متغییر
نوع رکورد را میتوان طوری تعریف کرد که طول بخشی از آن ثابت و طول بخش دیگری بر اساس شرایط فیلدها متغییر باشد. در زیر یک مثال و در ادامه آن جدولی از حافظهای که اشغال میشود آورده شده است.
type
TPartType = (ptComputer, ptMonitor, ptComponent);
TPart = record
PartNumber : String[15];
Description : String[30];
Price : Double;
case PartType : TPartType of
ptComputer: (CPU : String[10]; Speed : String[10]; HardDrive : String[10]);
ptMonitor: (VideoType : String[10]; Size : String[5]; DotPitch : String[5]);
ptComponent: (Internal : Boolean; Specs : String[29]);
end;
این تعریف به کامپایلر می گویید که تنها یکی از متغییرهای مجموعه case را برای استفاده در هر رکوردی انتخاب کند. این یک راهکار بسیار خوب برای استفاده از حافظه می باشد؛ زیرا حافظه یکسانی برای هر مجموعهای از متغییرها در نظر گرفته میشود.
| بایت | نام متغییر | نام متغییر | نام متغییر |
| ۰ | PartNumber | ||
| 15 | Description | ||
| 45 | Price | ||
| 53 | PartType | ||
| 54 | CPU | VideoType | Internal |
| 55 | Specs | ||
| 64 | Speed | Size | |
| 69 | DotPitch | ||
| 74 | HardDrive |
دسترسی به یک بایت
بعضی مواقع، هنگامیکه با یک API خارجی کار میکنید، احتیاج دارید که اطلاعاتی از نوع Word یا Longint را به نوعهای دلخواه بشکنید. به عنوان مثال TMSF را بصورت زیر در نظر بگیرید:
| Most Significant Byte | Least Significant Byte | ||
| Unused | Frames | Seconds | Minute |
ساختار TMSFRec رو بصورت زیر تعریف میکنیم:
type
TMSFRec = record
Minutes : Byte;
Seconds : Byte;
Frames : Byte;
Dummy : Byte;
end;
در این حالت ما میتوانیم به راحتی به هر یک از بایتهای نوع Longint دسترسی داشته باشیم:
begin MinuteLbl.Caption := IntToStr(TMSFRec(Position).Minutes); SecondLbl.Caption := IntToStr(TMSFRec(Position).Seconds); FrameLbl.Caption := IntToStr(TMSFRec(Position).Frames); end;
در مثال قبل، Position متغییری از نوع Longint میباشد.
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن