delphi4arab منتديات دلفي للعرب

نسخة كاملة : استحضار جميع المكونات إلى TStrings
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله
هل من طريقة لاستحضار جميع المكونات إلى TStrings؟
هذه الطرق لا تنفع إلا في Packages
كود :
uses TypInfo, ToolIntf, Exptintf; procedure GetComponentNames(lst: TStrings); var i, k: Integer; CRef: TClass; strName: ShortString; begin lst.Clear; for i := 0 to ToolServices.GetModuleCount-1 do begin for k := 0 to ToolServices.GetComponentCount(i)-1 do begin CRef := TClass(GetClass(ToolServices.GetComponentName(i, k))); while CRef <> nil do begin strName := CRef.ClassName; if lst.IndexOf(strName) = -1 then lst.Add(strName); if str <> 'TComponent' then CRef := CRef.ClassParent else CRef := nil; end; end; end; end;

كود :
uses ToolsApi; {....} var a, i: Integer; begin with (BorlandIDEServices as IOTAPackageServices) do begin for a := 0 to GetPackageCount - 1 do begin for i := 0 to GetComponentCount(a) - 1 do begin {get each component name with GetComponentName(a, i);} end; end; end; end;
بارك الله فيكم.
لم افهم السؤال جيدا و لكن أعرف التالي
أولا انا بالعادة استخدم TStringList للتعامل مع ال Strings و عن طريقها يمكنك فعل كل شئ في السترنغات و حتي يمكنك الاستفادة من مزايا Names و ال value عندما يكون هناك ترابط بين جدولين مثلا اسم الجهاز و الأي بي و للاستفادة منها نقوم مثلا

كود :
ipList := TStringList.Create ;

أما لامر أكثر توسعا فأنا استخدم TList و هو يقوم بحفظ Objects و يقوم تقريبا بنفس عمل TStringList و لكن مع الاوبجيكتس
بارك الله في أخي o15s19 على الرد
في الحقيقة ليس ذاك الذي أقصد، TStrings أو TStringList لا يهم...
الذي أبحث عنه هو طريقة لجلب قائمة بأسماء جميع المكونات إلى TComboBox أو TListBox أو ... (أعني أي TStrings).
الأكواد التي طرحتها تستختدم في صناعة Packages يعني من داخل IDE للدلفي.
وجدت طريقة (باستخدام Registry) لا أظنها الأفضل لكنها تفي بالغرض:
كود :
procedure GetComponentNames(lst: TStrings); var i, j, iPos: Integer; Reg: TRegistry; sComponent: String; slValues, slData: TStrings; begin Reg := TRegistry.Create; slValues := TStringList.Create; slData := TStringList.Create; try Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Borland\Delphi\6.0\Palette', False); // Change reg key where appropriate Reg.GetValueNames(slValues); for i := 0 to Pred(slValues.Count) do begin lst.Append(slValues[i]); lst.Append('----------'); slData.Delimiter := ';'; slData.DelimitedText := Reg.ReadString(slValues[i]); for j := 0 to Pred(slData.Count) do begin sComponent := slData[j]; iPos := Pos('.', sComponent); if (iPos > 0) then Delete(sComponent, 1, iPos); lst.Append(sComponent); end; end; finally slData.Free; slValues.Free; Reg.Free; end; {try..finally} end;
شكرا كثيرا أخي على الرد.
على ما اظن أني فهمت الفكرة, أنت تريد احضار اسماء المكونات الخاصة بالدلفي و وضعها في قائمة معينة.
شكرا لك أخي الكريم...............

طبعا فكرة Delimiter جميلة جدا

شكرا لك مرة ثانية على الفكرة