shpegah
چهارشنبه 23 تیر 1389, 10:03 صبح
سلام دوستان خوب
من يك ليست از فرمهاي موجود در يك پروژه را نياز دارم دقيقا مشابه آنچه كه در
[(FormView(Shift+F12 ]خود دلفي 7 وجود دارد در داخل يك برنامه ديگر . براي اينكار من اسم پروژه را از كاربر ميگيرم و بااستفاده از خواندن خط به خط text فايل پروژه.آنها را وارد ليستم ميكنم ولي ميدانم كار جالبي نيست چون در داخل Project Option در قسمت Available Forms هم از آن استفاده شده پس حتما در بخشي از properties هاي موجود در Application قرار دارد.
ميتوانيد راهنماييم كنيد؟ممنونم
Felony
چهارشنبه 23 تیر 1389, 11:41 صبح
تا جایی که من میدونم خود دلفی هم از همین روش استفاده میکنه ، با یک حلقه فایل dpr پروژتون رو بررسی کنید و لیست یونیت ها رو در بیارید ، حالا با یک حلقه تو یونیت ها بررسی کنید اگر شیئی از کلاس TForm مشتق شده بود نام اون شئ رو در بیارید :
Procedure ExtractForm(ProjectFile: String; ListBox: TListBox);
var
StrList1, StrList2: TStringList;
Temp: String;
LineCount1, LineCount2: Integer;
begin
StrList1:= TStringList.Create;
StrList2:= TStringList.Create;
try
StrList1.LoadFromFile(ProjectFile);
for LineCount1:= 0 to StrList1.Count - 1 do
begin
if StrList1.Strings[LineCount1]= '{$R *.res}' then Exit;
if pos('in', StrList1.Strings[LineCount1])> 0 then
begin
// Extract pas file of project from project source file
Temp:= Copy(StrList1.Strings[LineCount1], Pos('''',StrList1.Strings[LineCount1])+ 1, Length(StrList1.Strings[LineCount1]));
Temp:= Copy(Temp, 0, Pos('''',StrList1.Strings[LineCount1])- 3);
if ExtractFilePath(Temp)= '' then
StrList2.LoadFromFile(ExtractFilePath(ProjectFile) + Temp)
else
StrList2.LoadFromFile(Temp);
for LineCount2 := 0 to StrList2.Count - 1 do
if Pos('class(TForm)', StrList2.Strings[LineCount2])> 0 then
ListBox.AddItem(Copy(StrList2.Strings[LineCount2],4 ,Pos('=',StrList2.Strings[LineCount2])-5), nil);
end;
end;
finally
StrList1.Free;
StrList2.Free;
end;
end;
نحوه استفاده ( به عنوان مثال ) :
ExtractForm('F:\Me\Self Projects\Library Management\S.LM.dpr', ListBox1);
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.