PDA

View Full Version : وادار کردن کنترل ، به نمایش Hint بدون استفاده از ActivateHint



Mahyaa
چهارشنبه 01 اسفند 1386, 14:47 عصر
سلام
آیا ممکن هست Hint یک کنترل درون فرم رو بدون قرار گرفتن پوینتر موس بر روی آن نمایش بدیم ؟
با THintWindow و ActivateHint آشنا هستم ولی ترجیح میدم ازش استفاده نکنم .

آیا راه دیگه ای هست ؟


ممنون .

vcldeveloper
چهارشنبه 01 اسفند 1386, 14:55 عصر
با THintWindow و ActivateHint آشنا هستم ولی ترجیح میدم ازش استفاده نکنم .
به چه علتی؟!

Mahyaa
چهارشنبه 01 اسفند 1386, 15:15 عصر
ممنون از جواب سریع : )

چند تایی مشکل باهاش دارم که با وجودی که وقت زیادی گذاشتم نتونستم راهی براش پیدا کنم .
Create و Free کردن THintWindow رو باید در همون یونیت Manage کنم . از Try و ّfinally هم نمیتونم استفاده کنم . چون بلا فاصله که Free میشه و خوب یعنی اصلا نمایش داده نمیشه .

مشکل دوم هم Style نمایش Hint هست که نمیدونم چرا متفاوته با Hint هایی که خود کنترلها نشون میدن . بنابراین باید HintColor و ... رو خودم تنظیم کنم که زیاد مطلوب نیست .
مشکل سوم اینه که هرکاری کردم HintPause کار خودش رو کرد اصلا به مقداری که من بهش میدم کاری نداره . (یا شاید من تصور درستی از موارد استفاده این خاصیت ندارم)
مشکل دیگه اینکه اندازه خود HintBox رو باید بهش بدیم و نمیدونم چطوری میتونم تنظیم کنم که به نسبت متنی که در آن قرار گرفته Autosize باشه .

کلا فکر کردم شاید راهی باشه که بشه خود کنترل رو وادار کرد که Hint خودش رو نشون بده .

ممنون

vcldeveloper
پنج شنبه 02 اسفند 1386, 01:20 صبح
شما لازم نیست که Create و Free کردن پنجره Hint را کنترل کنید. کاری که شما باید انجام بدید اینه که یک کلاس جدید از THintWindow مشتق بگیرید. کلاس THintWindow بصورت پیش فرض دقیقا همون رفتاری رو از خودش نشون میده که بصورت عادی در یک Hint استاندارد دلفی می بینیم، چون کلاس پیش فرض دلفی برای نمایش Hint همین کلاس THintWindow هست. اگر می خواید رفتار یا ظاهر پنجره Hint را تغییر بدید، می تونید این کار را در کلاس خودتون انجام بدید، مثلا مقدار Color را تغییر بدید، یا طول و عرض یا Style پنجره را تغییر بدید، و کارهای دیگه که همگی از طریق override کردن متدهای پایه THintWindow یا تغییر مقادیر پیش فرض فیلدهای آن، امکان پذیر هست.
بعد از اینکه کلاس خودتون رو تعریف کردید، باید در ابتدای اجرای برنامه (مثلا در OnCreate فرم اصلی) مقدار متغیر HintWindowClass را تغییر بدید. مثلا:
HintWindowClass := TMyHintWindow
این کار باعث میشه که برنامه بجای THintWindow از کلاس Customized شده شما برای نمایش Hint کنترل ها استفاده کنه.


مشکل سوم اینه که هرکاری کردم HintPause کار خودش رو کرد اصلا به مقداری که من بهش میدم کاری نداره . (یا شاید من تصور درستی از موارد استفاده این خاصیت ندارم)
مدت زمان مکث Hint توسط Application تعیین میشه و ربطی به خود پنجره نمایش Hint نداره. دقت کنید که HintPause مقدار مکثی که بعد از اون باید Hint نمایش داده بشه رو مشخص میکنه. اگر می خواید مدت زمان نمایش یک Hint را تغییر بدید (مثلا کاری کنید که Hint مربوطه مدت زمان بیشتری روی صفحه باقی بمونه) باید از خصوصیت HintHidePause استفاده کنید.


مشکل دیگه اینکه اندازه خود HintBox رو باید بهش بدیم و نمیدونم چطوری میتونم تنظیم کنم که به نسبت متنی که در آن قرار گرفته Autosize باشه .
بصورت عادی نیازی به انجام این محاسبه ندارید، چون متد CalcHintRect در کلاس THintWindow این کار رو براتون انجام میده، اما اگر می خواید نحوه محاسبه را تغییر بدید، کافیه که این متد را Override بکنید و محاسبه خودتون رو انجام بدید.