PDA

View Full Version : فرم ثانویه



narsiss
چهارشنبه 22 مهر 1388, 19:03 عصر
فرمی دارم که حاوی یک DBGrid هست...در قسمتی از برنامه فرم ثانویه ای با نام Modal از روی این فرم ایجاد می کنم اما موفق نمیشم در modal.dbgrid.Oncellclick تابع مورد نظرم رو صدا بزنم...خودم فکر می کنم اشکال از امضای تابع باشه که به این صورت هست
procedure Tmain.myprocedure(Sender: TObject)اما نمی دونم چه طور تابع رو تعریف کنم.

Mahmood_M
چهارشنبه 22 مهر 1388, 19:34 عصر
اگر این تابع رو در فرم تعریف کرده باشید ( مثلا در قسمت Public ) ، امضای تابع مشکلی نداره ، فقط باید بگید که چطور می خواید اون رو فراخوانی کنید !
در حالت عادی اگه فرم اول رو در فرم دوم Use کرده باشید به سادگی استفاده از Procedure امکان پذیر هست :

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
MainFrm.MyProcedure;
end;

اگر فرم Modal رو Create میکنید باید رویداد OnCellClick جدول درون رو مقدار دهی کنید :

Modal.DBGrid.OnCellClick := MyProcedure;

لطفا توضیح بیشتری بدید و بگید که چطور اون رو فراخوانی می کنید ؟

...

merced
چهارشنبه 22 مهر 1388, 19:35 عصر
براي يه DBGird تو فرم اوليت يه رويداد OnCellClick بنويس . بعد براي فرم بعدي بگو


ّForm2.DBGrid1.OnCellClick := Form1.DBGrid1CellClick ;

narsiss
چهارشنبه 22 مهر 1388, 21:26 عصر
اگر این تابع رو در فرم تعریف کرده باشید ( مثلا در قسمت Public ) ، امضای تابع مشکلی نداره ، فقط باید بگید که چطور می خواید اون رو فراخوانی کنید !
در حالت عادی اگه فرم اول رو در فرم دوم Use کرده باشید به سادگی استفاده از Procedure امکان پذیر هست :

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
MainFrm.MyProcedure;
end;

اگر فرم Modal رو Create میکنید باید رویداد OnCellClick جدول درون رو مقدار دهی کنید :

Modal.DBGrid.OnCellClick := MyProcedure;

لطفا توضیح بیشتری بدید و بگید که چطور اون رو فراخوانی می کنید ؟

...

تابع درقسمتPublicفرم main تعریف شده
و کدهام هم به این شکل هست

procedure Tmain.N12Click(Sender: TObject);
var modal:TForm2;
begin
modal:=TForm2.Create(Application);
modal.Show;
modal.DBGrid1.OnCellClick:=myprocedure;
end;
ولی بعد از moda.DBGrid1.OnCellClick:=فقط Form1،Form2،Tform1،TForm2که در main،استفاده شده اند و خود modal رو نشون میده و به هیچ تابعی دسترسی ندارم
به نظر شما نحوه ی ساختن فرم ثانویه ام مشکل داره؟

narsiss
چهارشنبه 22 مهر 1388, 21:29 عصر
براي يه DBGird تو فرم اوليت يه رويداد OnCellClick بنويس . بعد براي فرم بعدي بگو


ّForm2.DBGrid1.OnCellClick := Form1.DBGrid1CellClick ;

این راه رو هم امتحان کردم اما جواب نگرفتم...همون طور که در پست بالا اشاره کردم شاید دارم فرمم رو اشتباه می سازم:متفکر:

merced
چهارشنبه 22 مهر 1388, 22:00 عصر
اين همونيه كه مي خواي ؟؟‌

narsiss
چهارشنبه 22 مهر 1388, 23:14 عصر
اين همونيه كه مي خواي ؟؟‌

ممنونم از راهنماییتون...بله همونه که می خوام...برنامه شما به درستی اجرا میشه اما وقتی می برم تو برنامه خودم باز همون مشکل قبلی رو دارم.
http://dc170.4shared.com/img/140909712/ef89e203/untitled.JPG (http://www.4shared.com/file/140909712/ef89e203/untitled.html)
یک موردی هست که فراموش کردم بگم:در رویداد OnCellClick مربوط بهDBGrid فرم اصلی(Form2) که از روی اون دارم فرم دیگه ای(Modalیا همون x) رو ایجاد می کنم، قبلاً تابعی نوشته ام...این مشکل ایجاد می کنه؟

merced
پنج شنبه 23 مهر 1388, 06:21 صبح
خوب لابد اعلانش رو ننوشتي.
اگه نوشتي تخصيصش رو خودت دستي بنويس (شايد دلفي بلد نيست :چشمک:)

من كار خاصي نكردم . تو فرم يك DBGrid گذاشتم. يه رويداد نوشتم . DBGrid‌ رو پاك كردم :لبخند:

narsiss
پنج شنبه 23 مهر 1388, 12:25 عصر
خوب لابد اعلانش رو ننوشتي.
اگه نوشتي تخصيصش رو خودت دستي بنويس (شايد دلفي بلد نيست :چشمک:)

معلومه که اعلان رو نوشتم...تخصیص دستی هم نمی شد

من كار خاصي نكردم . تو فرم يك DBGrid گذاشتم. يه رويداد نوشتم . DBGrid‌ رو پاك كردم :لبخند

می دونم اصلاً کار پیچیده ای نیست...من حتی کدهای شما رو کپی پیست هم کردم...نمی دونم چرا درست نمیشه:متفکر:....به هر حال خیلی ممنونم