ورود

View Full Version : سوال: یک تابع مشترک برای رویدادها



Borland.C
سه شنبه 17 مرداد 1391, 23:01 عصر
می خوام برای رویدادهای چند کامپوننت مختلف یک تابع مشترک بنویسم تا از دوباره کاری جلوگیری بشه
مثلا: فرض کنید 3یا4 تا TextEdit داریم ،می خوایم وقتی وارد هر کدوم میشیم رنگ اون ادیت زرد و وقتی خارج می شیم سفید بشه.
نام کامپوننت ها : Edit1,Edit2,... غی هرچی دیگه میتونه باشه
فرض کنید تابه به این صورت باشه
void mEnter(نام کامپوننت)
وقتی وارد ادیت میشیم تابع رویدادش به این صورته

void __fastcall TForm1::Edit1Enter(TObject *Sender)
{

}

فکر کنم منظورم واضح گفته باشم
* جهت یادآوری::چشمک:
می دونم اگه تو این تابع از خصیصه color استفاده کنم مشکل حله!اما این جوری باید برای هر رویداد همون رو تکرار کنم با نام کامپوننت.می خوام نامش رو خودش تشخیص بده بعد تغییرات بده فکر می کنم با استفاده از اشاره گر Sender بشه 1کارایی کرد.اگه کسی این کارو انجام داده لطفا راهنمایی کنه. :لبخند:
ممنون

#target
چهارشنبه 18 مرداد 1391, 00:12 صبح
void mEnter()
{
TEdit* C = (TEdit*)Form4->ActiveControl;
C->Color = clRed;
}

Ananas
چهارشنبه 18 مرداد 1391, 04:55 صبح
سلام.
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
dynamic_cast< TEdit * >( Sender )->Color = 0x00FFFFFF;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
dynamic_cast< TEdit * >( Sender )->Color = 0x00808080;
}

Borland.C
چهارشنبه 18 مرداد 1391, 08:40 صبح
با تشکر از target# , ananas
هر دو پاسخ درسته اما به نظرم راه حل آناناس بهتره چون راه حل اول برای تابع exit باید اول رنگ کامپوننت رو تغییر داد بعد دستورات mEnter تایپ کرد و به 1 اشاره گر C هم نیازداریم در صورتی که در راه دوم این مسائل نیست.
اما واقعا از هردو ممنونم،مدتی بود بدجوری کلافم کرده بود.از اونجایی که 1مرجع درست و حسابی برای سی وجود نداره گیج شده بودم

Borland.C
چهارشنبه 18 مرداد 1391, 08:42 صبح
سلام.
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
dynamic_cast< TEdit * >( Sender )->Color = 0x00FFFFFF;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
dynamic_cast< TEdit * >( Sender )->Color = 0x00808080;
}
میشه در مورد dynamic_cast کمی توضیح بدی؟!!

Ananas
چهارشنبه 18 مرداد 1391, 12:21 عصر
http://barnamenevis.org/showthread.php?344802-%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%86%D9%88%D8%B9-reinterpret_cast-%D9%88-static_cast-%D8%9F&highlight=dynamic_cast
http://barnamenevis.org/showthread.php?341719-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%86%D9%88%D8%B9-%D8%B5%D8%B1%DB%8C%D8%AD-%D8%A8%D8%A7-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%86%D9%88%D8%B9-%D8%B6%D9%85%D9%86%DB%8C-%DA%86%D9%87-%D9%81%D8%B1%D9%82%DB%8C-%D8%AF%D8%A7%D8%B1%D8%AF%D8%9F&highlight=dynamic_cast