PDA

View Full Version : یه سئوال در مورد Listbox



مهدی رحیم زاده
یک شنبه 17 تیر 1386, 12:21 عصر
سلام
چطوری میشه توی یک لیست باکس وقتی ماوس روی هر کدوم از Itemهای اون میره ( کلیک نکنه و فقط روی اون بره ) رنگ زمینه اون Item تغییر کنه ...

mehdi.mousavi
چهارشنبه 20 تیر 1386, 19:17 عصر
سلام
چطوری میشه توی یک لیست باکس وقتی ماوس روی هر کدوم از Itemهای اون میره ( کلیک نکنه و فقط روی اون بره ) رنگ زمینه اون Item تغییر کنه ...


سلام.
ابتدا یه کلاس جدید بسازید و اونو از ListBox درایو کنید. سپس DrawMode اونو به OwnerDrawFixed یا OwnerDrawVariable تغییر بدید و در نهایت در متود OnDrawItem رنگ مورد نظرتون رو برای آیتمی که کرسر mouse روشه، set کنید و آیتم رو، رو صفحه بکشید.

vcldeveloper
پنج شنبه 21 تیر 1386, 03:26 صبح
در رویداد OnMouseMove اون ListBox کد زیر را بنویسید:


var
SelectedItemIndex : integer;
begin
SelectedItemIndex := (Sender as TListBox).ItemAtPos(Point(X,Y),True);
if SelectedItemIndex >= 0 then
(Sender as TListBox).ItemIndex := SelectedItemIndex;
end;

مهدی رحیم زاده
پنج شنبه 21 تیر 1386, 06:12 صبح
در رویداد OnMouseMove اون ListBox کد زیر را بنویسید:

کد:
var
SelectedItemIndex : integer;
begin
SelectedItemIndex := (Sender as TListBox).ItemAtPos(Point(X,Y),True);
if SelectedItemIndex >= 0 then
(Sender as TListBox).ItemIndex := SelectedItemIndex;
end;
این کد فکر می کنم با دلفی باشه ....
من اصلا با دلفی کار نکردم ...
میشه اینو به کد سی شارپ تبدیل کنید ...

vcldeveloper
پنج شنبه 21 تیر 1386, 10:51 صبح
شرمنده، شب بود، اشتباهی توی بخش #C پست زدم! :D

میشه اینو به کد سی شارپ تبدیل کنید ...
مطمئن نیستم همچین رویدادی در #C پیاده سازی شده یا نه، اما اگر قابلیت هندل کردن پیغام های ویندوز را داشته باشه، باید بتونید خودتون پیغام مربوط به حرکت موس بر روی ListBox را دریافت کنید (WM_MOUSEMOVE) و در زمان دریافت این پیغام، کار مربوطه را انجام دهید. بطور کلی باید محدوده هر Item را با استفاده از LB_GETITEMRECT بدست بیارید و چک کنید که آیا مکان موس در محدوده اون Item هست یا نه (با استفاده از تابع PtInRect .
البته این با استفاده از Windows API هست. ممکنه خود #C برای همچین کاری متدهایی را برای کلاس ListBox تعریف کرده باشه (مثل دلفی که ItemAtPos را برای TListBox ایجاد کرد).
در هر حال ببخشید که اشتباهی در این بخش پست زدم.

موفق باشید