View Full Version : ایجاد اشیاء در فرم فرزند ؟؟؟
ali_mohamadi8928
چهارشنبه 28 آذر 1386, 01:15 صبح
با سلام .
من یک فورم اصلی دارم و یک فورم فرزند که در فورم اصلی میشه از منوی File > New یک فورم فرزند جدید در فورم اصلی ساخت .
حالا یک دکمه در فورم اصلی گذاشتم که با کد نویسی یک دکمه رو در فورم فرزند انتخاب شده ایجاد کنه .
از کدم اشکال نمیگیره Delphi ولی نمیدونم چرا دکمه اصلا ایجاد نمیشه در فورم فرزند .
نمونه رو میزارم ببینید مشکل از کجاش هست ؟؟
با تشکر .
vcldeveloper
چهارشنبه 28 آذر 1386, 01:37 صبح
procedure TForm1.New1Click(Sender: TObject);
begin
Child := TChild.Create(self);
end;
rasool_brn
چهارشنبه 28 آذر 1386, 01:55 صبح
البته شی Child رو باید خودتون تعریف کنین و باید به صورت سراسریم تعریف شده باشه:
var
Child:TChild;
برنامه شما یه مشکل دیگه هم داره .اونم اینه که button در فرم فرزند فعال ایجاد نمی شه. کد onclick مربوط به Buttonرو اینجوری تغییر بده:
procedure TForm1.Button1Click(Sender: TObject);
var btn:TButton;
begin
btn:=TButton.Create(self);
btn.Parent:=ActiveMDIChild;
btn.Caption:='salam';
btn.Left:=10;
btn.Top:=10;
end;
ali_mohamadi8928
چهارشنبه 28 آذر 1386, 02:05 صبح
البته شی Child رو باید خودتون تعریف کنین و باید به صورت سراسریم تعریف شده باشه:
var
Child:TChild;
برنامه شما یه مشکل دیگه هم داره .اونم اینه که button در فرم فرزند فعال ایجاد نمی شه. کد onclick مربوط به Buttonرو اینجوری تغییر بده:
procedure TForm1.Button1Click(Sender: TObject);
var btn:TButton;
begin
btn:=TButton.Create(self);
btn.Parent:=ActiveMDIChild;
btn.Caption:='salam';
btn.Left:=10;
btn.Top:=10;
end;
من اون شیء Child رو که در قسمت اولی گفتی منظورت رو نفهمیدم ولی وقتی اون کد رو که در قسمت دوم دادی جایگزین کردم درست شد !!! منظورت از شی Child چی هست که باید سراسری تعریف بشه ؟ کجا تعریف بشه ؟
راستی چرا وقتی فورم فرزند ساخته میشه اندازش به اندازه ی اصلی خودش نیست ؟؟؟ ( یعنی به همون اندازه ای که خودم طراحی کرده بودمش )
rasool_brn
چهارشنبه 28 آذر 1386, 02:10 صبح
منظورت از شی Child چی هست که باید سراسری تعریف بشه ؟ کجا تعریف بشه در بالای
implementation
راستی چرا وقتی فورم فرزند ساخته میشه اندازش به اندازه ی اصلی خودش نیست ؟؟؟ ( یعنی به همون اندازه ای که خودم طراحی کرده بودمش )
procedure TForm1.New1Click(Sender: TObject);
begin
child:=TChild.Create(self);
child.Width:=385;
child.Height:=247;
end;
ali_mohamadi8928
چهارشنبه 28 آذر 1386, 02:21 صبح
علتش چیه که باید اون کار رو بکنم ؟ مگه همینجوری که داره درست کار میکنه مشکلی به وجود میاد ؟
ali_mohamadi8928
چهارشنبه 28 آذر 1386, 02:25 صبح
راستی وقتی کد زیر رو مینویسم .
child.Width:=385;
child.Height:=247;
یه مشکلی هست که یک ثانیه خیلی کوتاه که اگه دقت نکنی معلوم نمیشه فورم اندازه ی قبلیش رو داره بعد یهو به این اندازه در میاد !!!! ایا راهی برای حل این مشکل نیست ؟؟؟
روش دیگه ای که بهینه تر باشه وجود نداره ؟
vcldeveloper
چهارشنبه 28 آذر 1386, 03:57 صبح
علتش چیه که باید اون کار رو بکنم ؟ مگه همینجوری که داره درست کار میکنه مشکلی به وجود میاد ؟نه مشکلی وجود نداره. متغیر Child در یونیت Unit1 تعریف شده بود و نیازی به تعریف مجدد یک متغیر از نوع TChild نبود.
برنامه شما یه مشکل دیگه هم داره .اونم اینه که button در فرم فرزند فعال ایجاد نمی شه.
مشکلی که بهش اشاره کردید یک مشکل تکنیکی نیست، فقط می تونه با توجه به منطق برنامه یک مشکل منطقی باشه،یعنی؛ اگر کاربر Parent دکمه ساخته شده را مسقیما Child در نظر بگیره، از نظر فنی مشکلی در برنامه بوجود نمیاد و دکمه هم به درستی در فرمی که Child به آن اشاره میکنه ایجاد میشه. اما اگر کاربر می گفت که قصد ایجاد چندین نمونه از کلاس TChild رو داره و می خواد که دکمه مورد نظر در فرم فرزند فعال ایجاد بشه، اون وقت اشکال شما می تونست وارد باشه.
rasool_brn
چهارشنبه 28 آذر 1386, 09:32 صبح
متغیر Child در یونیت Unit1 تعریف شده بود و نیازی به تعریف مجدد یک متغیر از نوع TChild نبود.کاملا درسته . من متوجه تعریف Child:TChild در Unit1 نشدم.
اما اگر کاربر می گفت که قصد ایجاد چندین نمونه از کلاس TChild رو داره و می خواد که دکمه مورد نظر در فرم فرزند فعال ایجاد بشه، اون وقت اشکال شما می تونست وارد باشه.حرف شما درسته . ولی من به عنوان یک کاربر عادی که می خواد از این برنامه استفاده کنه به این برنامه نگاه کردم و به مشکلی بر خوردم که ممکنه برای هر کاربر عادی که از این برنامه استفاده می کنه هم پیش بیاد.
اگه از نظر برنامه نویسی بخوای به این برنامه نگاه کنی مشکلات دیگه ای هم داره که از دید کاربر این برنامه پنهانه و فقط برنامه نویس می تونه متوجه اون بشه مثلا :
btn:=TButton.Create(self);
btn:=TButton.Create(ActiveMDIChild); // This is okکه البته من نخواستم اشاره به اون بکنم چون هیچ تاثیری در برنامه انتهایی که کاربربا اون کار می کنه ایجاد نمی کرد و کاربر انتهایی اصلا متوجه این تغییر نمی شد .
rasool_brn
چهارشنبه 28 آذر 1386, 10:09 صبح
یه مشکلی هست که یک ثانیه خیلی کوتاه که اگه دقت نکنی معلوم نمیشه فورم اندازه ی قبلیش رو داره بعد یهو به این اندازه در میاد !!!! ایا راهی برای حل این مشکل نیست ؟؟؟
روش دیگه ای که بهینه تر باشه وجود نداره ؟مقدار خصوصیت Position فرم Child رو به poDefaultPosOnly تغییر بده.
Position:=poDefaultPosOnly;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.