PDA

View Full Version : نمایش فرم (کمک فوری)



Future
یک شنبه 27 شهریور 1384, 18:53 عصر
سلام دوستان
من یک آرایه تعریف کردم و در آن نام فرمهایم را ذکر کرده ام . حالا می خوام بعد از زدن هر دکمه فرم مربوطه ایجاد شود ولی با پیغام خطا روبرو می شود



Const
nameforms:array[1..row,1..col]of string =(('11','frm_GroupAshia'),('12','frm_IdentifyAshia '));

var
f : TForm;
row : integer;
name : string;
begin
for row := 1 to 2 do
begin
if nameforms[row,1] = IntToStr(TSpeedButton(sender).Tag) then
begin
name := nameforms[row,2];
registerclass('T'+name);
f := TForm(Application.FindComponent(''+name+''));
if f = nil then
begin
name := f.Create(Frm_Main);
name := name.show;
name.bringtofront;
end;
end;
end;

پیغام خطای اول : TPersistentclass and String
پیغام خطای دوم : String and TForm

hr110
دوشنبه 28 شهریور 1384, 07:46 صبح
دوست عزیز این روش شما اشتباه است، شما باید از یک آرایه که کلاسهای فرمهای شما را شامل میشود استفاده کنید.

Future
پنج شنبه 31 شهریور 1384, 17:59 عصر
دوست عزیز سلام
برنامه من به این روال کار می کنه که همه چیز بصورت runtime ایجاد می شوند . من یک بانک دارم و در آن اسم منوهایم هست وقتی روی هر bottun کلیک می کنم آنگاه می خوام از طریق نامی که در بانک هست فرم را نمایش دهد البته در حالت وقتی فرمها در پروژه ایجاد می شوند مشکلی ندارم ولی چون من می خواهم از خاصیت Mdichild و MdiClient استفاده کنم با مشکل بر می خورم . لطفا مرا در این زمینه راهنمایی کنید یا اگر مقدور است mail خود را بفرمائید تا من برنامه را در اختیارتان بگذارم
با تشکر

Future
شنبه 02 مهر 1384, 12:54 عصر
سلام دوستان
من در ابتدا تمام فرمها را رجیستر کردم و بعد کد زیر هم اضافه کردم
وقتی که اسم فرم را دستی می دهم مشکلی ندارم و برنامه به راحتی اجرا میشه و وقتی توسط این دستورات کار می کنم برنامه خطا میده و کلاسش را پیدا نمی کنه
procedure TFrm_Main.tag_sender(sender: TObject);
var
F : TForm;
FC : TFormClass;
row : integer;
name : string;
begin
F := nil;
for row := 1 to 2 do
begin
if nameforms[row,1] = IntToStr(TSpeedButton(sender).Tag) then
begin
name := nameforms[row,2];
break;
end;
end;
{ if Frm_GroupAshia=nil then
begin
Frm_GroupAshia:=TFrm_GroupAshia.Create(Frm_Main);
end;
Frm_GroupAshia.Show;}
FC := TFormClass(findClass('T'+name));
F := FC.Create(Frm_Main);
F.Show;
F.BringToFront;
end;

Naficy
شنبه 02 مهر 1384, 20:27 عصر
کار رو سخت نکنید. دو آرایه از دو نوع متفاوت (یکی integer و یکی TFormClass) بگیرید. از یکی از آنها برای مقایسه تان با خصوصیت Tag و از دیگری برای create کردن فرم مورد نظر استفاده کنید.
یا تنها همان آرایه دوم را بسازید و در خصوصیت Tag، ایندکس عضو آرایه را قرار دهید. (به جای اینکه هر بار با for بدنبال آن ایندکس بگردید)

Future
یک شنبه 03 مهر 1384, 12:36 عصر
سلام دوست عزیز
آقا من این کار را هم کردم ولی در موقع کامپایل پیغام خطای زیر را می دهد

Error: Incompatible types : TFormClass and Class refrence


Type
Tformclass : class of TForm
var
Formclass : array[0..2] of TformClass
f : Tform
Begin
FormClass[0]:=Tfrm_GroupAshia
FormClass[1]:=Tfrm_IdentifyAshia

Naficy
دوشنبه 04 مهر 1384, 19:55 عصر
ببینم شما که خودتون TFormClass رو تعریف نمی کنین؟ چون خودش وجود داره. (البته تعریف کردن شمام مشکلی ایجاد نمی کنه!)
من یه تست کردم و مشکلی نداشتم. مطمئنید که مثلا Tfrm_GroupAshia یک کلاس از نوع TForm است؟ یا چه می دانم؛ مثلا متغیر FormClass رو دو جا با دو نوع مختلف تعریف نکردین، یا اشکالاتی از این قبیل وجود نداره؟
در همون خطی که خطا رو می گیرین یه تستی بکنین ببینین همه چیز درسته یا نه.