ورود

View Full Version : استفاده از FindComponent در تابع



sajioo
سه شنبه 02 اردیبهشت 1393, 21:44 عصر
دوستان وقتی در پروسیجر یک باتن از FindComponent استفاده می کنم جواب میده اما در تابع جواب نمیده.
چطوری باید به تابع معرفیش کنم؟
لطفا راهنمایی بفرمایید:متفکر:

عقاب سیاه
سه شنبه 02 اردیبهشت 1393, 22:28 عصر
فکر کنم اگه کدی که استفاده می کنید را بزارید مشکل پیدا بشه

*جیگرم*
سه شنبه 02 اردیبهشت 1393, 22:35 عصر
بخاطر والد (parent) این مسئله پیش اومده!
یا تابع مربوطه رو در کلاس والد (TForm) تعریف کنید و یا در تابع نام والد رو هم در findcomponent استفاده کنید.

یوسف زالی
چهارشنبه 03 اردیبهشت 1393, 00:20 صبح
فرض کنید که از فرم یک می خواهید با همین تابع یک چیزی رو از فرم دو پیدا کنید، این تابع که فقط یک ورودی می گیره، از کجا پس بهش بگیم می خواهیم تو چی بگردی؟ بنابراین باید یه نگاهی بندازیم به پیاده سازیش. با کنترل کلیک روی تابع می رسیم به:


function TComponent.FindComponent(const AName: string): TComponent;

و این یعنی تمام کلاس هایی که زیرمجموعه کلاس TComponent هستند "درون خودشون" یک چنین تعریفی دارند و این تابع رو دارند.
با خوندن داخل کدهاش (که فعلا ازش رد می شیم) متوجه خواهیم شد که این تابع در لیستی از کامپوننتهای درون خودش عمل جستجو رو انجام می ده.
دلیل این که شما درون تابعتون نتونستید ازش استفاده کنید احتمالا اینه که تابع شما در فضایی خارج از فضای مربوط به کلاسی از جنس کامپوننت تعریف شده. در اینجا منظورم کلاس فرم جاری هست، و خارج از اون می تونه یک عدد تابع خارج از فضای private, public.. فرم باشه. مثلا مستقیم در implementation.
با تعریف کردن تابعتون در فضای کلاسی که از کامپوننت مشتق شده، در اینجا همون فرمتون، این تابع بخشی از کلاس شما خواهد شد و دسترسی به اجزای protected و بالاتر براتون باز می شه (استثنا دارد) به همین دلیل مثلا در رویداد دکمه، که اگر دقت کرده باشید، در فضای published فرم قرار داره، می تونید ازش استفاده کنید.
خب، این همه داستان گفتم که برسیم به اینجا که پست شماره 3 صحیح است.
البته با کمی اغماض، به خاطر Owner نه Parent