View Full Version : ایجاد چند فرم در زمان اجرا
Land_Of_Inprise
سه شنبه 01 فروردین 1385, 11:15 صبح
سلام
من میخواستم بپرسم چطور میتونم در زمان اجرا RunTime فرمهایی رو ایجاد کنم و این فرمها رو به دلخواه خودم در هر زمان که نیاز دارم نمایش بدم و ببندم .
من میتونم فرمهایی رو ایجاد کنم ولی وقتی چند فرم رو میسازم نمیتونم بین اونها تفاوتی ببینم . برای مثال :
Application.CreateForm(myForm);
with myForm do begin
Caption:='Test';
show;
end;
اینو بعنوان مثال نوشتم حالا فرض کنید من به همین ترتیب 3 فرم ایجاد کردم همه اینها با نام myForm ایجاد شده اند ، چطور میتونم فرم دوم رو نمایش بدم ؟
با تشکر .
سال نو رو هم تبریک میگم .
Delphi Skyline
سه شنبه 01 فروردین 1385, 12:20 عصر
می تونی از آرایه استفاده کنی و هر دفعه یکی از آرایه ها رو اینجاد کنی .
Land_Of_Inprise
سه شنبه 01 فروردین 1385, 19:29 عصر
یک مثال میزنید لطفا ؟
Delphi Skyline
سه شنبه 01 فروردین 1385, 22:24 عصر
اینم یه مثال ::
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
B : array[0..400] of tbutton;
bn : integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
bn := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
bn := bn+1;
b[bn] := tbutton.Create(Self);
b[bn].Parent := self;
b[bn].Caption := 'Button'+inttostr(bn);
b[bn].Left := 0;
b[bn].Top := 1;
end;
end.
خوش و خرم باشید .
Land_Of_Inprise
دوشنبه 14 فروردین 1385, 16:29 عصر
سلام
ممنونم ، حالا فرض کنید من بروی هر فرمی که به این شکل ایجاد میشه یک Memo و یک Edit هم میذارم ، میخوام بدونم چطور میتونم متن درون ادیت رو درون ممو بنویسم . ( البته هر دو درون یک فرم هستند که به این روش ایجاد شده . )
سوال دوم اینکه چطور رویدادها ( Event ) رو برای این فرمها تعریف کنم . مثلا OnCreate یا OnClose یا OnShow .
متشکرم .
Delphi Skyline
دوشنبه 14 فروردین 1385, 16:46 عصر
ممنونم ، حالا فرض کنید من بروی هر فرمی که به این شکل ایجاد میشه یک Memo و یک Edit هم میذارم ، میخوام بدونم چطور میتونم متن درون ادیت رو درون ممو بنویسم . ( البته هر دو درون یک فرم هستند که به این روش ایجاد شده . )
b[bn].edit1.text := b[bn].memo1.text;
سوال دوم اینکه چطور رویدادها ( Event ) رو برای این فرمها تعریف کنم . مثلا OnCreate یا OnClose یا OnShow .
خودش تعریف شده ::
Land_Of_Inprise
سه شنبه 15 فروردین 1385, 00:08 صبح
b[bn].edit1.text := b[bn].memo1.text;
خودش تعریف شده ::
سلام
منظورم این بود که کدی که میخوام برای این رویدادها بنویسم رو کجا باید بنویسم ؟
متشکرم .
Land_Of_Inprise
شنبه 16 اردیبهشت 1385, 07:23 صبح
سلام
چطور میتونم نام فرمی که با این روش ( آرایه ) ایجاد شده رو بدست بیارم ؟ مثلا 3 فرم با این روش ایجاد کردم با موس یکی رو انتخاب میکنم چطور بفهمم که کدوم انتخاب شده ؟ ضمنا رویدادهای هر فرم رو کجا باید بنویسم ؟
ممنون میشم یکی از دوستان محترم پاسخ سوالات منو بده .
Mahyaa
شنبه 16 اردیبهشت 1385, 08:16 صبح
می تونید به فرمها مقدار Tag بدهید و عدد Tag هر فرم برابر با اندیس آرایه ای باشه که حاوی اون فرمه .
اینکه چطوری رویداد بنویسید :
باید کد را در یک Procedure با آرگومانهایی دقیقا مشابه با آرگومانهای رویداد مثلا OnClick بنویسید و بهد از اینکه Object را Create کردید :
Edit1.OnClick := MyProcedure
MyProcedure :
procedure MyProcedure (Sender : TObject);
begin
ShowMessage('Clicked');
end;
Land_Of_Inprise
شنبه 16 اردیبهشت 1385, 17:48 عصر
می تونید به فرمها مقدار Tag بدهید و عدد Tag هر فرم برابر با اندیس آرایه ای باشه که حاوی اون فرمه .
اینکه چطوری رویداد بنویسید :
باید کد را در یک Procedure با آرگومانهایی دقیقا مشابه با آرگومانهای رویداد مثلا OnClick بنویسید و بهد از اینکه Object را Create کردید :
Edit1.OnClick := MyProcedure
MyProcedure :
procedure MyProcedure (Sender : TObject);
begin
ShowMessage('Clicked');
end;
سلام
خیلی ممنونم از لطف شما ، اگر لطف کنید و توضیح بدید که چطور میتونم مقادیر اون تگهایی که فرمودید رو مقدار دهی کنم ممنون میشم . اگر مثالی بزنید خیلی عالی میشه .
متشکرم .
Mahyaa
دوشنبه 18 اردیبهشت 1385, 08:26 صبح
من نتونستم پست های جدید رو ببینم !:متعجب:
من دیروز یک پست اینجا داشتم که حالا نیست !
Mahyaa
دوشنبه 18 اردیبهشت 1385, 11:55 صبح
اگر مثالی بزنید خیلی عالی میشه
از تاخیر در جواب عذر می خوام .من دیروز یک مثال پست کردم اما ظاهرا درست ارسال نشده که امروز دیدم نیست!
به هر حال این یک مثاله که امیدوارم دیر نشده باشه :
در کد نوشته شده توسط آقای Delphi SkyLine می توانید خط * را اضافه کنید تا به شیئ خود که در اینجا Button است Tag بدهید . عدد داده شده برابر اندیس آرایه است که این شیئ در آن قرار گرفته :
procedure TForm1.Button1Click(Sender: TObject);
begin
bn := bn+1;
b[bn] := tbutton.Create(Self);
b[bn].Parent := self;
b[bn].Caption := 'Button'+inttostr(bn);
b[bn].Left := 0;
b[bn].Top := 1;
b[bn].Tag := bn; //**********
end;
حالا در رویداد کلیک Button ، از Sender آن مقدار Tag را دریافت میکنیم و به این ترتیب مشخص میکنیم که کدام Button کلیک شده است.
procedure MyButtonClick(Sender: TObject);
var
Ix : Integer;
begin
Ix := (Sender as TButton).Tag ; //-->Get the Tag ;
ShowMessage(B[Ix].Caption); //-->Show the Object Caption.
end;
امیدوارم قابل استفاده باشد.
Land_Of_Inprise
پنج شنبه 21 اردیبهشت 1385, 17:38 عصر
سلام
دوست عزیز از پاسخ شما متشکرم . بعد از ارسال پست قبلی خودم کمی سعی کردم و موفق به انجام کار شدم . البته با راهنمایی کامل شما دوست عزیز .
بسیار بسیار متشکرم .
Mahyaa
پنج شنبه 21 اردیبهشت 1385, 19:07 عصر
خواهش میکنم .
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.