PDA

View Full Version : در مورد فرمهای mdi ؟



hex161
چهارشنبه 26 اردیبهشت 1386, 13:14 عصر
با سلام.
من یه فرم نرمال دارم ، یه فرم MDI و یه فرم Child .
فرم اصلی MDI هست و فرمی که در پروژه اول نمایش داده میشه نرمال(اسپیلش) .
زمانی که فرم 3 که همون Child هست رو میخواهم اجرا کنم خطا میگیره . نمیدونم مفهوم خطاش چی هست . میخواستم بدونم مشکل از کجاست؟
با تشکر .

Mahmood_M
چهارشنبه 26 اردیبهشت 1386, 14:58 عصر
سلام
اگه تصویر یا متن خطا رو بنویسی جواب بهتری می گیری ...

زمانی که فرم 3 که همون Child هست رو میخواهم اجرا کنم خطا میگیره . نمیدونم مفهوم خطاش چی هست
اگه خطاش تقریبا بی معنی هست ، شاید Access Violosion باشه ( البته Access Violosion ها هم معنی خاص خودشون رو دارند ) ...
ولی دلیل نمایش یک AV می تونه این باشه که مثلا شاید قبل از اینکه فرم مورد نظر رو Show کنید ، اون رو Create نکردید ...
AV ها معمولا زمانی نشون داده میشن که بخواید به عناصری دسترسی داشته باشید که وجود ندارند یا ساخته نشدن یا ...

به هر حال دوباره کد رو بررسی کنید و دقت کنید که فرمهای Child قبل از نمایش باید Create بشن ...
ولی اگه مشکل از چیز دیگه ای هست پوزش من رو بپذیرید ...

موفق باشید ...

babak869
چهارشنبه 26 اردیبهشت 1386, 23:14 عصر
بایستی خاصیت Visible فرم فرزند رو false کنی . البته اگه بخوای فرمها رو در زمان اجرا نشون بدی.مثل این



Application.CreateForm(TForm1, Form1);
Form1.showmodal;

موفق باشید

hex161
پنج شنبه 27 اردیبهشت 1386, 17:18 عصر
سلام .
وقتی فرم رو Create میکنم این پیغام رو میده :

hex161
پنج شنبه 27 اردیبهشت 1386, 22:02 عصر
اگه میشه یه نمونه ساده برام بزارید ممنون میشم .

SYNDROME
جمعه 28 اردیبهشت 1386, 06:41 صبح
با سلام
خطای شما بخاطر این است که شما فرم fsMDIForm(فرم پدر) را ندارید.
به طور مثال Form1 خاصیت FormStyle را برابر fsMDIForm قرار بده.
Form2 خاصیت FormStyle را برابر fsMDIChild قرار بده.
حالا اگر در Form1 بخواهید Form2را فراخوانی کنید مشکلی نخواهید داشت.
در زمان اجرای برنامه شما Form2 را Creste می کنید ولی چون Form1 شما fsMDIForm نیست خطای بالا ظاهر می شود.

Younes_M
شنبه 29 اردیبهشت 1386, 06:43 صبح
type
TFrmChild = class(TForm);

var
Form1: TForm1;
FrmMDI: TForm;
FrmChild: TForm;
aButton: TButton;
implementation
{$R *.dfm}
procedure TForm1.aButtonClick(Sender: TObject);
begin
FrmChild:= TForm.CreateParented(FrmMDI.Handle);
FrmChild.Show;
TButton(Sender).Visible:= False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FrmMDI:= TForm.Create(Application);
FrmMDI.FormStyle:= fsMDIForm;
aButton:= TButton.Create(Self);
aButton.Parent:= FrmMDI;
aButton.Caption:= 'Create FrmChild';
aButton.Left:= 10;
aButton.Top:= 10;
aButton.OnClick:= aButtonClick;
FrmMDI.ShowModal;
Button1.Visible:= False;
end;
end.

امیدوارم مفید باشد