PDA

View Full Version : اجرای دستورات موجود در فرم دیگری با کلیک روی دکمه فرم جاری



parniant
دوشنبه 27 آبان 1387, 07:44 صبح
با سلام تو برنامم می خوام وقتی مثلا دکمه bitbtn1 مربوط به فرم 1 را کلیک می کنم دستورات موجود در فرم دیگری انجام شود که دستور مورد نظر را به صورت زیر می نویسم اما پیغام می ده if رو به چه صورت باید بنویسم

if form1.bitbtn1.click=true then
form2.caption:='';

Pr0grammer
دوشنبه 27 آبان 1387, 09:17 صبح
اول باید وقتی توی فرم 1 هستی Alt+F11 رو بزنی و فرم دوم و بعد ok رو انتخاب کنی. (اگه موقع Alt+F11 پیغامی اومدی ، مشکلی نیست چون قبلاً فرم دو رو اضافه کرده بودی!) حالا توی دکمه فرم 1 بنویس :



if BitBtn1.Enabled=True then Form2.Caption := '';

merced
دوشنبه 27 آبان 1387, 09:22 صبح
سوالت واضح نيست
اگه مي خواي دو تا دکمه کار مشابه انجام بدن :
توي onCreate فرمت بنويس



Button1.OnClick := form2.Button2.OnClick ;


وگرنه مي توني يه procedure بنويسي و اونو از هر جا که خواستي فراخواني کني

امید امرایی
دوشنبه 27 آبان 1387, 09:29 صبح
با سلام تو برنامم می خوام وقتی مثلا دکمه bitbtn1 مربوط به فرم 1 را کلیک می کنم دستورات موجود در فرم دیگری انجام شود که دستور مورد نظر را به صورت زیر می نویسم اما پیغام می ده if رو به چه صورت باید بنویسم

اگه منظورتون اينه كه براي دو Button يك رويداد تعريف كرديد و حالا بايد اين Button ها رو تفكيك كنيد مي تونيد از Sender كه به صورت اتوماتيك به تابع شما ارسال مي شه استفاده كنيد .



procedure TForm1.Button1Click(Sender: TObject) ;
begin
if Sender = Button1 then
ShowMessage('Button1 clicked!')
else if Sender = Button2 then
ShowMessage('Button2 clicked!')
else
ShowMessage('??? clicked!') ;
end;

parniant
دوشنبه 27 آبان 1387, 13:04 عصر
منظورم اینه که من می یام تو برنامم هنگام حذف یک رکورد از جدولم به جای اینکه پیغام را در showmessage بذارم دارم از یک فرماستفاده می کنم که دوعدد button هم استفاده کرده ام برای بلی و خیر که با دادن پیغام (آیا شما از حذف کردن مطمئن هستید ) اگر بلی زده شود باید به فرم اصلی برود و دستورات مربوط به حذف را در آنجا انجام دهد در ضمن این عمل حذف کردن را در خود دکمه بلی نمی نویسم چون من فقط از یک فرم (پیغام حذف ) دارم استفاده می کنم و هر زمان بخواهم در هر فرمی اطلاعاتی را حذف کنم به این فرم بیاید و بعد از زدن بلی به فرم ابتدایی برگردد و عمل حذف را در همان جا انجام دهد

maisam57
دوشنبه 27 آبان 1387, 14:09 عصر
خوب شما چرا براي اين كار از يك متغير global استفاده نميكني كه مقدار متغير با زدن button مشخص ميشه و به ايت ترتيب ميتوني فرمان مورد نظر رو اجرا كني

امید امرایی
دوشنبه 27 آبان 1387, 18:19 عصر
خوب شما چرا براي اين كار از يك متغير global استفاده نميكني كه مقدار متغير با زدن button مشخص ميشه و به ايت ترتيب ميتوني فرمان مورد نظر رو اجرا كني

جسارتا اين روش استعداد خطا رو در برنامه زياد مي كنه .


منظورم اینه که من می یام تو برنامم هنگام حذف یک رکورد از جدولم به جای اینکه پیغام را در showmessage بذارم دارم از یک فرماستفاده می کنم که دوعدد button هم استفاده کرده ام برای بلی و خیر که با دادن پیغام (آیا شما از حذف کردن مطمئن هستید ) اگر بلی زده شود باید به فرم اصلی برود و دستورات مربوط به حذف را در آنجا انجام دهد در ضمن این عمل حذف کردن را در خود دکمه بلی نمی نویسم چون من فقط از یک فرم (پیغام حذف ) دارم استفاده می کنم و هر زمان بخواهم در هر فرمی اطلاعاتی را حذف کنم به این فرم بیاید و بعد از زدن بلی به فرم ابتدایی برگردد و عمل حذف را در همان جا انجام دهد

خوب شايد بهتر بود از اول به همين شكل مطرح مي كرديد . اما براي اين منظور شما بايد به جاي استفاده از تابع Show از ShowModal استفاده كنيد .

رويداد Button هاي موجود در فرم فرم Confirm


procedure ConfirmForm.NoButtonClick(Sender: TObject);
begin
ModalResult := mrNo;
end;


procedure ConfirmForm.YesButtonClick(Sender: TObject);
begin
ModalResult := mrYes;
end;
و در فرم هاي ديگه مي تونيد به اين شكل فراخواني كنيد :


ConfirmForm.ShowModal;
if ConfirmForm.ModalResult = mrYes then
DeleteRecord;
و حتي باز هم به منظور كاهش استعداد خطا و جلوگيري از تعريف متغير هاي متعدد مي تونيد تابع ShowModal مربوط به فرم Confirm رو override كنيد و تظيمات لازم رو اعمال كنيد . به عنوان مثال مي تونيد با overload كردن اين متد يك پارامتر رو به عنوان متن پيام به اون ارسال كنيد :



public
procedure ShowModal(ConfirmText: String); overload;

procedure ConfirmForm.ShowModal(ConfirmText: String);
begin
ConfirmForm.Caption := 'Confirmation';
ConfirmLabel.Caption := ConfirmText;
inherited;
end;

behzad_dr
دوشنبه 27 آبان 1387, 20:13 عصر
دوست گرامی ..
اولا اینکه چرا از خود showmessage استفاده نمی کنید ؟
دوما بحث استفاده از پروسیجر ها مال همینجاست دیگه ..
شما یک پروسیجر توی همون فرم اولی تعریف کن و توی فرم دومی توی مثلا همون کلید "بلی" پروسیجر رو فراخوانی کن ..
اگه هم خواستید این عملیات رو بروی چندین تیبل انجام بدین .. خوب به صورت پارامتری پروسیجر تون رو بنویسید ..که فکر میکنم شما فقط عملیات حذف رو میخواهید روی یک تیبل انجام بدین .
موفق باشید

parniant
چهارشنبه 29 آبان 1387, 22:54 عصر
با سلام به تمام دوستان
راستشو بخواید من مشکلم فقط اینه که چطور بگم
if form1.button1.click then
چون این دستور رو نمی شناسه

mafazel
پنج شنبه 30 آبان 1387, 07:29 صبح
منظورم اینه که من می یام تو برنامم هنگام حذف یک رکورد از جدولم به جای اینکه پیغام را در showmessage بذارم دارم از یک فرم استفاده می کنم که دوعدد button هم استفاده کرده ام برای بلی و خیر که با دادن پیغام (آیا شما از حذف کردن مطمئن هستید ) اگر بلی زده شود باید به فرم اصلی برود و دستورات مربوط به حذف را در آنجا انجام دهد در ضمن این عمل حذف کردن را در خود دکمه بلی نمی نویسم چون من فقط از یک فرم (پیغام حذف ) دارم استفاده می کنم و هر زمان بخواهم در هر فرمی اطلاعاتی را حذف کنم به این فرم بیاید و بعد از زدن بلی به فرم ابتدایی برگردد و عمل حذف را در همان جا انجام دهد
سلام دوست عزیز
1-ما در برنامه نویسی تحت ویندوز هیچ وقت نمی گوییم اگر BitBtn1 کلیک شد این کار را انجام بده. بجای آن میگوییم وقتی BitBtn1 کلیک شد این کار را انجام بده (که همونطور که میدونید دستورات "این کار" را در BitBtn1.OnClick می نویسیم.)
2- برای گرفتن تایید یا انصراف از یک عمل دستور MessageDlg رو گذاشتند. نحوه استفاده از این دستور رو در راهنمای دلفی ببینید. منتها عیب این دستور اینه که عنوان دکمه ها رو به راحتی نمیتونید فارسی کنید. ما هم مثل شما خودمون یه فرم برای این کار ساختیم. شما میخواهید نحوه استفاده از این فرم رو یاد بگیرید. این پست رو هم بد نیست ببینید.http://barnamenevis.org/forum/showthread.php?t=132001
3- شما خودتون فرمی رو برای دریافت تایید یا انصراف نوشتید. BitBtn یک مشخصه (Property ) بنام ModalResult داره. برای دکمه تایید این مشخصه رو بر روی mrOk و برای دکمه انصراف این مشخصه رو بر روی mrCancel تنظیم کنید.
حالا اگر مثلا فرم دریافت تایید بنام FrmGetConfirm باشد میتوانید از کدی شبیه به کد زیر استفاده کنید:


if FrmGetConfirm.ShowModal=mrOk then
begin
// do Ok commands ......
end;

این دستور داخل دکمه حذف شما نوشته میشه. دستور ShowModal فرم رو نشون میده و بعد از بسته شدن اون، مقدار ModalResult دکمه زده شده رو بر می گردونه و ادامه دستورات انجام میشه.
موفق باشید.