استحضار جميع المكونات إلى TStrings
#1
السلام عليكم ورحمة الله
هل من طريقة لاستحضار جميع المكونات إلى 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;
بارك الله فيكم.
الرد
#2
لم افهم السؤال جيدا و لكن أعرف التالي
أولا انا بالعادة استخدم TStringList للتعامل مع ال Strings و عن طريقها يمكنك فعل كل شئ في السترنغات و حتي يمكنك الاستفادة من مزايا Names و ال value عندما يكون هناك ترابط بين جدولين مثلا اسم الجهاز و الأي بي و للاستفادة منها نقوم مثلا

كود :
ipList := TStringList.Create ;

أما لامر أكثر توسعا فأنا استخدم TList و هو يقوم بحفظ Objects و يقوم تقريبا بنفس عمل TStringList و لكن مع الاوبجيكتس
الرد
#3
بارك الله في أخي 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;
شكرا كثيرا أخي على الرد.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#4
على ما اظن أني فهمت الفكرة, أنت تريد احضار اسماء المكونات الخاصة بالدلفي و وضعها في قائمة معينة.
شكرا لك أخي الكريم...............

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

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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم