PDA

View Full Version : سوال: درباره کلاس Tlistcolumn



تجلی
شنبه 24 دی 1390, 14:04 عصر
سلام .
من در جایی خونده بودم که برای استفاده از یک کلاس باید اول یک نمونه از اون کلاس رو ایجاد کنیم مثلا برای رجیستری اول یک متغیر از نوع کلاس Tregistry تعریف میکنیم

var reg:Tregistry

بعد اون رو ایجاد میکنیم >

reg:=Tregistry.creat;
و بعد از اون هست که میتونیم از خصوصیات این کلاس استفاده کنیم مثلا >



reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey(key,true);
و الی آخر
.
.

اما برای استفاده از عنصر listview یک متغیر از نوع Tlistcolumn تعریف میشه که نیازی به ایجاد کردنش نیست >

procedure TForm1.Button3Click(Sender: TObject);

var
col:TListColumn;
begin

col:=listview1.Columns.Add;
col.Caption:='one';
col.Width:=100;

end;

حالا این کلاس با اون کلاس رجیستری تفاوتش در چیه که کلاس رجیستری رو حتما باید ایجادش کرد ولی این رو خیر .

Mahmood_M
شنبه 24 دی 1390, 14:38 عصر
کلاس TListColumn هم مانند کلاس TRegistry یک class هست و فرق زیادی نداره ، اما تفاوتی که در کد بالا بهش اشاره کردید در نحوه ی استفاده از کلاس و مقداردهی به اون هست ، در نمونه ی اول شما یک نمونه از کلاس TRegistry به وسیله ی فراخوانی متد Create ایجاد کردید و اون رو به متغیری از نوع TRegistry اختصاص دادید
اما در کد دوم شما به وسیله ی متد Add مربوط به کامپوننت ListView ، یک نمونه از کلاس TListColumn ایجاد کردید و متغیر Col رو برابر با کلاس TListColumn ایجاد شده توسط متد Add قرار دادید
در هر دو کد بالا یک نمونه از کلاسها Create شده ، فقط متد Create برای کلاس TRegistry رو خودتون فراخوانی کردید ولی متد Create کلاس TListColumn توسط متد Add مربوط به ListView فراخوانی شد
اگر سورس متد Add رو نگاه کنید ، در نهایت به متد Create می رسید :

function TListColumns.Add: TListColumn;
begin
Result := TListColumn(inherited Add);
UpdateCols;
end;

...

function TCollection.Add: TCollectionItem;
begin
Result := FItemClass.Create(Self);
Added(Result);
end;

البته ستونهای ListView از نوع TCollection هستند که بحث در مورد اونها برمی گرده به مبحث ساخت کامپوننت و زیاد به بحث ما مربوط نمیشه

موفق باشید ...