PDA

View Full Version : سوال: فرم با مقدار بازگشتی



paladin
چهارشنبه 31 شهریور 1389, 07:43 صبح
من می خوام یه فرم داشته باشم که این فرم دارای یه dbgrid هست . وقتی روی dbgrid کلیک کنی ، یه مقدار مثل یه عدد رو برگردونه . چجوری فرم من یه مقدار رو برگردونه ؟ منظورم به جاییه که اون فرم رو show کرده . من می خواهم از این فرم در جاهای مختلف برنامه استفاده کنم و هر جا که خواستم از این فرم اطلاعات بگیرم .

pezhvakco
چهارشنبه 31 شهریور 1389, 08:33 صبح
درست نفهمیدم منظور شما از اینکه داده رو برگردونه چیه ؟
به کجا برگردونه ؟

وقتی روی dbgrid کلیک کنی ، یه مقدار مثل یه عدد رو برگردونه
میتونی برای نگه داری داده ای که می خوای از متغییر عمومی استفاده کنی .

devil00x
چهارشنبه 31 شهریور 1389, 11:14 صبح
دوست عزیز به نظر من میتونی با استفاده از یک متغییر سراسری مشکلت رو حل کنی!
ببین من خودم به شخصه این کار رو انجام میدم.البته نمی خام بگم که روش مهندسی و درستیه ها!!!
میام یه متغییر به نام GoFrom تعریف میکنم که نشان دهنده ارجاع کننده است .
ودر اون فرم مرجع هم اعمالی که میخام رو برای ارجاع کننده می فرستم یعنی متغییر مربوط به اون رو ست می کنم.

paladin
چهارشنبه 31 شهریور 1389, 21:27 عصر
اولا تشکر از توجهتون !!!
دومادرباره استفاده از متغییر سراسری این مشکل هست که چه موقع او ن متغییر رو چک کنیم
مثلا من در form1 دارای grid هستم و میخوام از هرجای برنامه به یه شماره (مثلا شماره پرسنلی)
که در گرید انتخاب شده دسترسی داشته باشم. رو فرم فراخوانی (فرمی که به اون عدد نیاز داره )
یه edit و یه button هست که وقتی روی دکمه کلیک میکنی form1نمایش داده میشه و از gridگزینه مورد نظر رو ( مثلا پرسنل مورد نظر) انتخاب می کنی و باید بعد از انتخاب ، شماره پرسنلی رو تو edit فراخوانی بنویسیم .

;form1.showmodal
edit1.text := GlobalVar

مشکل کد بالا اینه که وقتی متغییر سراسری رو میریزیم تو edit هنوز دارای مقدار نیست. ما باید یه کاری شبیه dialog انجام بدیم . یعنی

if Dialog1.action then
edit1.text := GlobalVar
حالا تکلیف چیه ؟

esmit61
چهارشنبه 31 شهریور 1389, 23:36 عصر
مشکل کد بالا اینه که وقتی متغییر سراسری رو میریزیم تو edit هنوز دارای مقدار نیست.
خوب حتماً به این دلیله که متغیر رو درست مقداردهی نکرده اید. توی همون فرم 1 روی هر سطر که کلیک کرد، مقدار متغیر سراسری رو تنظیم کنید.
خدای ناکرده یه وقت توی هر دو تا یونیت که متغیر رو بصورت سراسری تعریف نمیکنید ؟

SYNDROME
چهارشنبه 31 شهریور 1389, 23:41 عصر
با سلام
آیا شما به Break Point چک کردید که ببینید واقعاً خط مورد نظر اجرا می شود یا نه؟
شاید در دستورات بعدی مقدار Edit را تغییر می دهید.
خط به خط برنامه را چک کنید.
موفق باشید

paladin
پنج شنبه 01 مهر 1389, 10:57 صبح
مشکل در اجرا شدن خط یا نشدن نیست . ابتدا برنامه فرم 1 رو نمایش میده و سپس بلافاصله مقدار متغییر سراسری رو میخونه که هنوز خالیه . برنامه باید بعد از نمایش فرم منتظر اتنخاب یک گزینه باشد سپس مقدار متغییر سراسری رو بخونه .

esmit61
پنج شنبه 01 مهر 1389, 11:57 صبح
ابتدا برنامه فرم 1 رو نمایش میده و سپس بلافاصله مقدار متغییر سراسری رو میخونه که هنوز خالیه
خوب هر وقت که روی گرید حرکت میکنید، مقدار متغیر رو هم تنظیم کنید دیگه! مشکل الان کجاست ؟

SAASTN
پنج شنبه 01 مهر 1389, 18:07 عصر
ابتدا برنامه فرم 1 رو نمایش میده و سپس بلافاصله مقدار متغییر سراسری رو میخونه که هنوز خالیه . برنامه باید بعد از نمایش فرم منتظر اتنخاب یک گزینه باشد سپس مقدار متغییر سراسری رو بخونه .
اگه از ShowModal استفاده کردید، این اتفاق نمی افته. برنامه منتظر می مونه تا فرمی که ShowModal شده بسته بشه بعد خط مربوط به پر کردن Edit اجرا می شه.
اگه هر بار که این فرم باز میشه قراره فقط یه با عمل انتخاب اتفاق بیافته همین روش باید جواب بده. فقط بهتره بجای متغیر سراسری یه تابع برای فرمتون تعریف کنید:
TForm1 = class(TForm)
private
{ Private declarations }
public
function GetNumber: Integer;
end;

...

function TForm1.GetNumber: Integer;
begin
if Self.ShowModal = mrOk then
Result := ...
end;