ورود

View Full Version : مشکل در مورد class



Sohrab_Tapar
یک شنبه 11 مرداد 1383, 20:40 عصر
من با یک حلقه به شکل زیر میخام همه کامپوننتهایی
را که زیر کلاسی از tdataset هستند
(مثل ttableوtqueryو...)
پیدا کنم


For i := 0 To Form1.ComponentCount-1 Do
If Form1.Components[i] ???? Then//اینجا باید شرط مناسب قرار بگیره
DoSomething

ولی نمیدانم چه باید بنویسم

نکته:



If Form1.Components[i] Is TDataset

به دردم نمیخوره.چون tdataset در یک رشته قرار دارد
در حقیقت من نام یک کلاس را دارم و میخواهم همه کامپوننتهایی که
از آن کلاس یا زیر کلاسی از آن هستند پیدا کنم

orion188
یک شنبه 11 مرداد 1383, 21:33 عصر
سلام.
شما میتونین از متد InheritsFrom استفاده کنین.
توی help خود دلفی کامل در این مورد توضیح داده شده.

Sohrab_Tapar
یک شنبه 11 مرداد 1383, 23:33 عصر
inheritesfrom خود کلاس را میگیره ولی من اسم اون کلاس رو دارم

مهدی کرامتی
دوشنبه 12 مرداد 1383, 02:12 صبح
این مشکل تون رو حل میکنه؟ :

var i:integer;
begin
for i:=0 to Form1.ComponentCount-1 do
if Form1.Components[i] is TDataSet then
ListBox1.Items.Add((Form1.Components[i] as TDataSet).Name);
end;

:?:

Sohrab_Tapar
دوشنبه 12 مرداد 1383, 14:53 عصر
نه متاسفانه
بگذارید این طوری بگم .
من یک متغیر از نوع string دارم که نام یک کلاس را در خود دارد
مثلا tdataset یا tcustomcombobox یا هر چیز دیگه.
حالا من میخوام همه کمپوننتهایی را که از کلاس مشخص شده در این string هستند ونیز
همه کمپوننتهایی که زیر کلاسی از آن هستند پیدا کنم.
مثلا اگر string مذکور برابر tdataset بود
کمپوننتهایی مثل table1 و table2 , query1 را پیدا کنم.

Sohrab_Tapar
شنبه 17 مرداد 1383, 19:25 عصر
function TInspectorForm.ClassInheritesFrom(Obj: TObject;
ClassName: String): Boolean;
var
cl : TClass;
begin
Result := False;
cl := Obj.ClassType;
While cl.ClassName <> 'TObject' Do Begin
If cl.ClassName = ClassName Then Begin
Result := True;
Break;
End;
cl := cl.ClassParent;
End;
end;