ورود

View Full Version : سوال: نحوه افزودن خاصیت های لیستی به یک کامپوننت



hadisalahi2
شنبه 03 اسفند 1387, 19:59 عصر
با سلام
من یک کامپوننت درست کردم که قرار چیزی شبیه به SQl Builder عمل کنه.
حالا می خوام یک Property براش بزارم که کاربر موقع تنظیم خاصیت از بین گزینه های لیست یکی رو انتخاب کنه . مثل خاصیت Align فرم یا مثلا خاصیت FormStyle یک فرم.
مثلا داخل لیست علائم
= <> > >= < <= و ... باشه و کاربر یکی از اینها رو انتخاب کنه.
ممنون از لطف همگی

vcldeveloper
یک شنبه 04 اسفند 1387, 01:01 صبح
مثل خاصیت Align فرم یا مثلا خاصیت FormStyle یک فرم.برای اینکار باید یک enum درست کنید:


TMyEnum = (meItem1,meItem2,meItem3);

TMyClass = class
private
FMyProp : TMyEnum;
published
property MyProp: TMyEnum read FMyProp write FMyProp;
end;

hadisalahi2
یک شنبه 04 اسفند 1387, 11:02 صبح
من هم اول از همين روش استفاده كردم ولي نمي دونم اون ليست شمارشي رو كجا بزارم
وقتي كه در قسمت Interface قرار مي دهم خطا ميده و ميگه به جاي علامت = بايد از : استفاده كنيد.
ميشه محل قرار گيري اين ليست رو مشخص كنيد كه بايد كجا تعريف كنم.

vcldeveloper
یک شنبه 04 اسفند 1387, 17:19 عصر
وقتي كه در قسمت Interface قرار مي دهم خطا ميده و ميگه به جاي علامت = بايد از : استفاده كنيد.
بخش type از interface.

hadisalahi2
پنج شنبه 08 اسفند 1387, 19:44 عصر
حالا چطور میتونم مقدار این لیست رو داخل یک متغیر رشته ای بریزم.چون من مستقیم این کار رو انجام دادم و پیغام خطا داد. شماره گزینه انتخاب شده رو پیدا میکنم و بعد مقدار اون رو خودم دستی وارد یک متغیر رشته ای میکنم.
آیا میشه مستقیم مقادیر یک لیست رو داخل ی متغیر رشته ای ریخت؟
یا حق

vcldeveloper
جمعه 09 اسفند 1387, 03:23 صبح
این اسمش لیست نیست. اگر توضیح بدید که چیکار میخواید بکنید، جواب مفیدتری بدست میارید.

hadisalahi2
جمعه 09 اسفند 1387, 11:29 صبح
شما اين ليست رو در نظر بگيريد:



TMyEnum3=(Sum,Count,Avg,Min,Max);


حالا من اين رو به عنوان يك Property در اختيار كاربر ميگذارم.حالا كاربر مثلا گزينه Sum رو انتخاب ميكنه . حالا من ميخوام مستقيم همون Sum انتخاب شده رو داخل يك متغير رشته اي بريزم.
وقتي كه مستقيم اين كار رو انجام مي دم خطاي عدم تطبيق نوع رو ميده.
براي اينكه بفهمم كدوم يكي انتخاب شده از تابع Ord استفاده ميكنم و شماره گزينه انتخاب شده توي ليست رو پيدا ميكنم بعد معادل رشته اي اون رو داخل يك متغير رشته اي ميريزم.

vcldeveloper
جمعه 09 اسفند 1387, 18:38 عصر
براي اينكه بفهمم كدوم يكي انتخاب شده از تابع Ord استفاده ميكنم و شماره گزينه انتخاب شده توي ليست رو پيدا ميكنم بعد معادل رشته اي اون رو داخل يك متغير رشته اي ميريزم.
خب باید هم این کار رو بکنید. Enum داده رشته ایی نیست. برای اون لیست شما، بهترین کار همین کاره. روش دیگه ایی هم وجود داره که بدرد مواقعی میخوره که کد استفاده کننده هیچ اطلاعی از گزینه های موجود در enum نداره، و خودِ دلفی در IDE خودش از آن استفاده می کنه، آن هم استفاده از توابع RTTI دلفی هست. شما برای این مورد نیازی به کار با RTTI ندارید.