PDA

View Full Version : سوال: نحوه برقراری ارتباط بین ImageIndex و Images



SAASTN
پنج شنبه 13 اسفند 1388, 19:16 عصر
سلام
من یک کنترل نوشتم که توی اون property های Images و ImageIndex وجود دارن. ImageIndex رو هم از نوع TImageIndex تعریف کردم اما توی ObjectInspector تنها یک combobox خالی جلوش نشون میده. البته تابع paint درست کار میکنه و عکس مورد نظر درست ترسیم می شه. اما نمی دونم چطور می تونم ارتباط بین این دو مشخصه رو برقرار کنم به نحوی که توی ObjectInspector لیست عکس های موجود در ImageList رو نمایش بده.
من جد و آباد کنترلهایی مثل TAction که همچین کاری می کنند رو در آوردم اما چیزی دستگیرم نشد.
ممنون می شم راهنمایی کنید.

vcldeveloper
جمعه 14 اسفند 1388, 18:16 عصر
برای همچین کاری از یک PropertyEditor باید استفاده بشه. ظاهرا کامپوننت های استاندارد دلفی از یک PropertyEditor برای این منظور استفاده می کنند، ولی این PropertyEditor برای تمام کامپوننت ها رجیستر نشده، برای همین هم کامپوننت های استاندارد دلفی این قابلیت را دارند، ولی کامپوننت شما این قابلیت را نداره.
منابع چندانی درباره این PropertyEditor در دسترس نیست، من کمی گشتم، ولی در سورس های دلفی و ToolsAPI چیزی برای آن پیدا نکردم. اگر اسم کلاس مربوط به این PropertyEditor را پیدا کنید، می تونید خیلی راحت با استفاده از RegisterPropertyEditor این کلاس را برای خصوصیت ImageIndex کامپوننت خودتان استفاده کنید.
اگر نتونید پیداش کنید، باید خودتان همچین کلاسی بنویسید؛ برای این منظور باید یک کلاس جدید از TIntegerProperty مشتق کنید، و اینترفیس ICustomPropertyListDrawing را با آن پیاده سازی کنید. یک نمونه کد برای این کار را می تونید در لینک زیر پیدا کنید (البته مطالب روسی هستند):
http://forum.sources.ru/index.php?showtopic=270239

SAASTN
جمعه 14 اسفند 1388, 23:00 عصر
با تشکر
اما propertyeditor در مورد کلاس من حتما register شده. چون توی objectinspector یک combobox جلوی property مورد بحث قرار میده. اما این combobox خالیه. مسئله اینه که این proprty حتما جایی باید به مشخصه images مرتبط بشه. شما جایی با همچین تکنیکی برخورد کردید؟ یک مشخصه مقادیر خوش رو از یک مشخصه دیگه بخونه؟
در صورتی که همچین تکنیکی وجود داره اساسا امکان استفاده از propertyeditorش توی کلاس های دیگه هست یا بطور کاملا اختصاصی برای اون کلاس نوشته شده؟
بازم متشکرم

vcldeveloper
شنبه 15 اسفند 1388, 00:14 صبح
در صورتی که همچین تکنیکی وجود داره اساسا امکان استفاده از propertyeditorش توی کلاس های دیگه هست یا بطور کاملا اختصاصی برای اون کلاس نوشته شده؟
Property Editorها را میشه به شکل های مختلفی رجیستر کرد، مثلا برای همه Propertyهایی که از نوع خاصی هستند، مثل همین TImageIndex؛ یا همه Propertyهایی که نام بخصوصی دارند، و غیره.

شاید یکی از دلایلی که یک Property Editor استاندارد برای کامپوننت های کاربر که از ImageIndex استفاده می کنند، ارائه نشده؛ همین باشه که نمیشه مطمئن بود کاربر حتما خصوصیتی با نام Images داشته باشه.

در هر حال، می تونید با الگو برداری از کدی که در لینک پست قبل ارائه شده، خودتون همچین کلاسی را برای کامپوننت خودتان بنویسید، و ازش استفاده کنید.