PDA

View Full Version : اجرای رویداد یک شی توسط یک شی دیگر



سيد مجتبي هاشمي
چهارشنبه 13 آذر 1387, 17:59 عصر
با سلام. سوالم از شما دوستان برنامه نویس این است که چگونه میتوان رویداد یک شی را در رویداد شی دیگری اجرا کرد. مثلا چگونه میتوان رویداد onkeypress مربوط به edit2 را در رویداد onkeypress مربوط به Edit5 اجرا کرد. یکی از دوستان گفته بود باید تمام پارامترهای آن را نام ببریم تا اجرا شود اما من نمیدانم چگونه باید این کار را کرد. لطفا اگه کسی جوابش رو میدونه بهم بگه که باید چی کار کنم. ممنون از شما.

shervin farzin
چهارشنبه 13 آذر 1387, 19:36 عصر
سلام
موقعي كه شما يك Event رو تعريف ميكنيد ، دلفي يك تابع براش ميسازه و شما در واقع درون اون
تابع دارين كد مينويسيد بعلاوه اين كه اون تابع به انتخاب شما به عنوان Event يكي از كامپوننتها
هم در نظر گرفته شده . پس كار كردن با تمام Event ها مثل كار كردن با يه تابع معموليه ، مثل
همون ميتونين از طريق نامش فراخوانيش كنيد و پارامترهاي وروديش هم البته كه بايد كامل باشن
به مثال زير نگاه كنيد :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
showmessage(key);
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
x:char;
begin
x:='C';
Edit1KeyPress(sender,x);
end;

من دوتا EditBox توي فرم گذاشتم . رويداد OnKeyPress براي Edit1 ، هر كاركتري رو كه كاربر وارد
كنه رو Showmessage ميكنه . در رويداد Edit2 من از Showmessage در Edit استفاده كردم ولي
اگه Focus روي Edit2 باشه و كاربر هر كليدي رو فشار بده فقط كاركتر C رو در Showmessage
خواهد ديد .
موفق باشيد .

vcldeveloper
پنج شنبه 14 آذر 1387, 07:22 صبح
البته این مدل کد نویسی اشکال داره، و بهتر هست که بجاش خودِ کامپوننت مورد نظر را بگونه ایی تحریک کنید که رویداد مربوطه را فراخوانی کند؛ مثلا در مورد شما، ارسال یک پیام ویندوز (WM_CHAR) به کنترل Edit مربوطه.

net_ved
پنج شنبه 14 آذر 1387, 10:02 صبح
آقای کشاورز لطفا کد پیام رو بنویسید

shervin farzin
پنج شنبه 14 آذر 1387, 11:14 صبح
سلام

مثلا در مورد شما، ارسال یک پیام ویندوز
آقاي كشاورز منظورتون رو متوجه نشدم . آيا حالتهاي ديگه هم ميتونه وجود داشته باشه .
ممنون از توجهتون .

vcldeveloper
پنج شنبه 14 آذر 1387, 17:08 عصر
آقای کشاورز لطفا کد پیام رو بنویسید
نوشتم که: WM_CHAR


آقاي كشاورز منظورتون رو متوجه نشدم . آيا حالتهاي ديگه هم ميتونه وجود داشته باشه .
یک رویداد اشاره گری به یک متد هست. وقتی شما کدی را که رویداد به آن اشاره میکنه، اجرا می کنید، در واقع دارید اون رویداد را دور می زنید. ممکن هست اون کامپوننت قبل از فراخوانی Event Handler یا بعد از آن، یکسری پردازش هایی انجام بده، که با این کار شما، انجام نمیشند. از طرفی، اگر Event Handler مربوط به اون رویداد به یک متد دیگه ایی اشاره بکنه، کد شما با مشکل مواجه میشه. شما اگر کدی دارید که هم در Event Handler یک رویداد استفاده میشه، هم در بخش های دیگه کدتان، بهتر هست که آن را در یک متد جداگانه بنویسید، و در Event Handler و سایر بخش های برنامه آن را فراخوانی کنید. اگر هم هدف فقط فعال کردن آن رویداد هست، بررسی کنید که آن کامپوننت تحت چه شرایطی آن رویداد را فراخوانی می کند، شما هم همان شرایط را برایش بوجود بیاورید تا خودش رویداد را ایجاد کند. بعضی از کامپوننت ها هم متناسب با نوع کاربردشان، خودشان متدهایی دارند که باعث اجرای یک رویداد می شود، مثل TButton که خودش متد Click دارد، و باعث ایجاد رویداد OnClick می شود.

Modernidea
شنبه 08 فروردین 1388, 22:22 عصر
نوشتم که: WM_CHAR


یک رویداد اشاره گری به یک متد هست. وقتی شما کدی را که رویداد به آن اشاره میکنه، اجرا می کنید، در واقع دارید اون رویداد را دور می زنید. ممکن هست اون کامپوننت قبل از فراخوانی Event Handler یا بعد از آن، یکسری .....

استاد Event Handler چيه؟:لبخند::خجالت::گریه:

vcldeveloper
شنبه 08 فروردین 1388, 23:51 عصر
Event Handler چيه؟
کدی که در پاسخ به یک رویداد فراخوانی میشه؛ مثلا وقتی روی یک Button در IDE دلفی دابل کلیک می کنید، یک Event-handler برای رویداد OnClick آن Button به کد برنامه شما اضافه میشه، که شما می تونید کد مورد نظر خودتان را به آن اضافه کنید، تا هر زمان رویداد کلیک برای آن دکمه رخ داد، کد شما اجرا شود.

Modernidea
یک شنبه 09 فروردین 1388, 00:33 صبح
یک Event-handler برای رویداد OnClick آن Button به کد برنامه شما اضافه میشه،
ميشه بگيد به كجاي برنامه اظافه ميشه؟ (منظورتون همون procedure ها هست؟)

vcldeveloper
یک شنبه 09 فروردین 1388, 00:50 صبح
ميشه بگيد به كجاي برنامه اظافه ميشه؟
هر Event-handler یک متد (همون procedure) تعریف شده در کلاس هست.