| ساختار رکوردها در دلفی
یک ساختار تعریف شده در پاسکال موضوعی تحت عنوان record میباشد. رکوردها را میتوان یک نوع داده که خود شامل چندین نوع داده دیگر است در نظر گرفت. برای تعریف رکوردها بصورت زیر عمل میکنیم:
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 را برای استفاده در هر رکوردی انتخاب کند. این یک راهکار بسیار خوب برای استفاده از حافظه می باشد؛ زیرا حافظه یکسانی برای هر مجموعهای از متغییرها در نظر گرفته میشود.
| بایت |
نام متغییر |
نام متغییر |
نام متغییر |
| 0 |
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 میباشد. نوشته شده توسط ابراهیم خدائی در چهارشنبه پانزدهم فروردین 1386 ساعت 2:45 | لینک ثابت |
|