PDA

View Full Version : تغییر رکورد در DBGRID با MOUSEWHEEL



mortezakiaee
پنج شنبه 08 آذر 1386, 11:17 صبح
اگه قرار باشه با حرکت دادن WHEEL موس رکورد DBGRID مون تغییر کنه چیکار باید بکنیم؟
در حالت عادی رکورد هایلایت شده تا جایی که توی صفحه هست جابه جا میشه و رکورد عوض نمیشه. (جدولSCROLL نمیشه)
سعی کردم WM_MOUSEWHEEL رو با WNDPROC بفرستم ولی عمل نمیکنه.

پرواز
پنج شنبه 08 آذر 1386, 11:30 صبح
اگه از کامپونننت EhLib استفاده کنی این مشکل برطرف میشه.

mortezakiaee
پنج شنبه 08 آذر 1386, 11:43 صبح
میدونم این کامپوننت و کامپوننت های دیگه ای مثل TxDBGRID این قابلیت رو دارن ولی من با چند نفر دیگه تو سایت داریم DBGRIDکدباز خودمونو می سازیم. در ضمن این کامپوننت ها تو ایران همه غیر مجازن.:خجالت::عصبانی:

JAFO_IRAN
پنج شنبه 08 آذر 1386, 14:13 عصر
سلام

هر TControl دارای یک متد به نام DoMouseWheel هست که به صورت معمول به متدهای DoMouseWheelUp, Down میرسند. اینها همان متدهایی هستند که در grid نوشته شده و در dbgrid به صورت کاملا ابتدایی و ناقص به ارث رسیده‌اند.

برای اینکه dbgrid درست کارکنه

1- باید متدهای به ارث رسیده زیر را غیرفعال کنید:



function TMyDBGrid.DoMouseWheelDown, Up -- both overried....
Result := False;
Call OnMouseWheelDown, Up events if desired...


2- متد DoMouseWheel را مثلا به صورت زیر بنویسید:



function TMyDBGrid.DoMouseWheel(... params ...): Boolean; // override in header...
begin
Result := inherited DoMouseWheel(... params ...);
if not Result and FDataLink.Active then
FDataLink.MoveBy(-WheelData div WHEEL_DELTA);
Result := True;
end;


ارادت

mortezakiaee
پنج شنبه 08 آذر 1386, 16:37 عصر
یه خورده بیشتر توضیح می دی؟
این functionتوی بخش privetتوی tcustomGrid درج شده. اگه از اونجا override بشه دیگه نمیشه تو tcustom grid نمیشه تعریف کرد. مگر تو public.

mzjahromi
پنج شنبه 08 آذر 1386, 19:51 عصر
قبلا در این مورد بحث شده با این حال:
یک ApplicationEvent بذار روی فرم اصلی ات و توی OnMessage اون کد زیر رو بنویس مشکلتتوی همه فرمها برطرف میشه

if msg.message=WM_MOUSEWHEEL then
Begin
msg.message:=WM_KEYDOWN;
msg.lParam:=0;
i:=HiWord(msg.wParam);
If i>0 then
Msg.wParam:=VK_UP
Else
Msg.wParam:=VK_DOWN;
Handled:=False;
End;

mortezakiaee
شنبه 10 آذر 1386, 07:45 صبح
متشکر. این کار برای یه پروژه خوب و کاربردیه(استفاده کردم:لبخندساده:)و لی بحٍ اصلی کامپوننت مورد نظره که دارم مینویسم. امیدوارم تموم که شد بزارم رو سایت. هرکی هم بتونه کمک کنه یا علی

mortezakiaee
شنبه 10 آذر 1386, 08:18 صبح
...

If msg.wParam>0 then
...
[/quote]
البته بهتره از کد به صورت زیر استفاده بشه. چون تابعHiword مقدار cardinal برمیگردونه که همیشه مثبته:خجالت: