PDA

View Full Version : ساختن دو یک فرم اما دو مرتبه



bmanfy
چهارشنبه 26 فروردین 1388, 18:23 عصر
سلام دوستان :
برنامه دارم که لازمه از یک فرم دو مرتبه ساخته بشه . فرمها به درستی ساخته میشه .
برای فرم دومی که میسازم مشکلی پیش نمیاد . اما زمانی که اولین فرمی که ساخته شده رو میخوام ببندم خطا میده . و فکر میکنم یه مشکل تو حافظه براش پیش میاد . پیامش بی سر و ته .
(فرمها رو بعد از Close با دستور Free از حافظه خارج میکنم . )
چه طور میتونم یک فرم رو به دفعات بسازم و از حافظه خارج کنم بدون اینکه چنین مسائلی پیش بیاد ؟
ممنون.

merced
پنج شنبه 27 فروردین 1388, 00:43 صبح
var f : TForm2 ;
begin
f := TForm2.Create(Application);
f.Caption := 'فرم جديد'
f.ShowModal ;
f.Free ;
end;

اگه Modal نمي كني بايد



procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree ;
end;

ghabil
پنج شنبه 27 فروردین 1388, 02:26 صبح
خب کدی که نوشتی رو بزار نمیشه که حدس زد!
اگر مدال نشون بده که دیگه نمیتونه همزمان دو تا فرم داشته باشه!

bmanfy
پنج شنبه 27 فروردین 1388, 08:25 صبح
merced عزیز با تشکر از جوابت .
میشه بگی دستور دوم یعنی چی ؟ و برای چی استفاده میشه ؟

merced
یک شنبه 30 فروردین 1388, 00:26 صبح
میشه بگی دستور دوم یعنی چی ؟ و برای چی استفاده میشه ؟


ببين. شما هر فرمي كه Create ميكني رو بايد Free‌ كني. حودت بايد تشخيص بدي كجا اين كار بهتره
در حالتي كه فرم رو Modal ‌نمي كني چون دستورات بعد از Show‌ اجرا مي شند پس حتما بايد زماني كه مطمئن شدي كه ديگه با فرم كاري نداري اون رو آزاد كني . بهترين جا OnClose‌ هست

ولي موقع Modal كردن بيشتر اوقات همچين حالتي رو نياز داريم.




f.showmodal ;
if f.Modalresult == mrOK then
doFunction ;
f.Free ;

bmanfy
یک شنبه 06 اردیبهشت 1388, 11:01 صبح
ا تشکر .
درسته اما CaFree چه فرق داره با Free ؟

حالا یک سوال دیگه و اگر بخواهم فرم ها رو به صورت پویا بسازم . یعنی حتی نام اونها رو . یعنی یک فرم رو بسازم اما با نامهای متفاوت که با استفاده از دستور متفاوتی بسازم . و هم چنین بتونم با اونها کار کنم .

کار اصلی که میخوام انجام بدیم یه برنامه چت شبیه یاهو که برای هر اکانت یک پنجره میسازه .
حال هم در حالت مدال و هم در حالت معمولی .
راهکاری به ذهنتون میرسه ؟

merced
یک شنبه 06 اردیبهشت 1388, 22:27 عصر
ا تشکر .
درسته اما CaFree چه فرق داره با Free ؟

حالا یک سوال دیگه و اگر بخواهم فرم ها رو به صورت پویا بسازم . یعنی حتی نام اونها رو . یعنی یک فرم رو بسازم اما با نامهای متفاوت که با استفاده از دستور متفاوتی بسازم . و هم چنین بتونم با اونها کار کنم .

کار اصلی که میخوام انجام بدیم یه برنامه چت شبیه یاهو که برای هر اکانت یک پنجره میسازه .
حال هم در حالت مدال و هم در حالت معمولی .
راهکاری به ذهنتون میرسه ؟

caFree درون خود رويداد onClose هست و يك ثابت هست نه يك متد (مثل Free)

فكر كنم منظورت از نام caption باشه براي برنامه شما. شما مي توني يك function درون unit فرم بنويسي به اين شكل :



procedure ShowIt(Cap : string) ;
var f : TfFormName ;
begin
f := TfFormName.Create(application) ;
f.Caption := cap ;
f.Update ;
f.Show ;
end;


حالا براي مديريت روي چند تا كه ساختي .
من يادمه قبلا آرايه اي از نوع TfFormName كه همون فرمي كه طراحي كردم ساختم و با اون ارايه كار كردم و جواب داد .

bmanfy
سه شنبه 08 اردیبهشت 1388, 12:05 عصر
فكر كنم منظورت از نام caption باشه براي برنامه شما. شما مي توني يك function درون unit فرم بنويسي به اين شكل

با تشکر .
منظورم همون نام هستش . آخه در زمان اجرا اگه قرار باشه نامها یکسان باشه در زمان بستن باقی فرمها به شمکل بر می خورم .

اما خوب در کل میشه همون آرایه ای استفاده کرد .
حالا برم تا همین جا انجام بدم باز مزاحم میشم .
ممنون.