ورود

View Full Version : سوال: حذف خصوصيات (property) از كامپوننت



pad_kay
سه شنبه 18 آبان 1389, 10:33 صبح
با سلام
من در حال ساخت كامپوننت جديد هستم و مي خواهم بعضي از خصوصيات كامپوننت را كه از اون مشتق شده رو حذف كنم
مثل Hint
لازم به ذكر است كه اين كامپوننت به صورت SubComponent است و من مي خواهم خصوصيتي در كامپوننت SubComponent است را حذف كنم
براي مثل در كامپوننت LabledEdit خصوصيت Hint مربوط به Lable را حذف كنم

vcldeveloper
سه شنبه 18 آبان 1389, 22:39 عصر
نمی تونید یک property رو که در کلاس پایه تعریف شده، و در دسترس هست، در کلاس فرزند مخفی کنید. این کار از نظر شی گرایی مشکل داره. اگر میخواید اون خصوصیات نباشند، باید به جای کلاس پایه فعلی، یک کلاس بالاتر که کلاس پایه فعلی از اون مشتق شده، و این خصوصیت را نداره؛ انتخاب کنید.

در VCL، کنترل ها معمولا از یک کلاس پایه اسمش با TCustom شروع میشه، مشتق میشند، مثلا: TCustomLabel. این کلاس پایه معمولا خصوصیات متداول اون کلاس رو به صورت protected ارائه میکنه، و کنترل اصلی (در اینجا TLabel) اونها رو public میکنه، تا در دسترس قرار بگیرند.

pad_kay
چهارشنبه 19 آبان 1389, 10:33 صبح
نمی تونید یک property رو که در کلاس پایه تعریف شده، و در دسترس هست، در کلاس فرزند مخفی کنید. این کار از نظر شی گرایی مشکل داره. اگر میخواید اون خصوصیات نباشند، باید به جای کلاس پایه فعلی، یک کلاس بالاتر که کلاس پایه فعلی از اون مشتق شده، و این خصوصیت را نداره؛ انتخاب کنید.

با تشكر از شما
ولي با جستجوهاي كه در اينترنت كردم به نتيجه اي خلاف نظر شما رسيدم
به مثال زير دقت كنيد :


uses DesignIntf;

procedure Register;
begin
RegisterComponents ('MyComps', [TEdit]);
DesignIntf.UnlistPublishedProperty(TFrameEdit,'Hin t');
DesignIntf.UnlistPublishedProperty(TFrameEdit,'BiD iMode');
end;

همانگونه در مثال فوق مي بيند مي توان با دستور

UnlistPublishedProperty
يك يا چند خصوصيت يك كامپوننت را حذف كرد
با تشكر

vcldeveloper
چهارشنبه 19 آبان 1389, 16:50 عصر
ولي با جستجوهاي كه در اينترنت كردم به نتيجه اي خلاف نظر شما رسيدم دوست عزیز، این اسمش حذف property نیست؛ در اون کد، داره با استفاده از OpenTools API دلفی، property مربوطه رو از لیست Object Inspector خارج میکنه. اینطوری کاربر اون property رو در داخل Object Inspector نمیبینه. Property سر جای خودش هست، و از طریق کد، در دسترس.