اگه قرار باشه با حرکت دادن WHEEL موس رکورد DBGRID مون تغییر کنه چیکار باید بکنیم؟
در حالت عادی رکورد هایلایت شده تا جایی که توی صفحه هست جابه جا میشه و رکورد عوض نمیشه. (جدولSCROLL نمیشه)
سعی کردم WM_MOUSEWHEEL رو با WNDPROC بفرستم ولی عمل نمیکنه.
اگه قرار باشه با حرکت دادن WHEEL موس رکورد DBGRID مون تغییر کنه چیکار باید بکنیم؟
در حالت عادی رکورد هایلایت شده تا جایی که توی صفحه هست جابه جا میشه و رکورد عوض نمیشه. (جدولSCROLL نمیشه)
سعی کردم WM_MOUSEWHEEL رو با WNDPROC بفرستم ولی عمل نمیکنه.
اگه از کامپونننت EhLib استفاده کنی این مشکل برطرف میشه.
میدونم این کامپوننت و کامپوننت های دیگه ای مثل TxDBGRID این قابلیت رو دارن ولی من با چند نفر دیگه تو سایت داریم DBGRIDکدباز خودمونو می سازیم. در ضمن این کامپوننت ها تو ایران همه غیر مجازن.![]()
سلام
هر 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;
ارادت
یه خورده بیشتر توضیح می دی؟
این functionتوی بخش privetتوی tcustomGrid درج شده. اگه از اونجا override بشه دیگه نمیشه تو tcustom grid نمیشه تعریف کرد. مگر تو public.
قبلا در این مورد بحث شده با این حال:
یک 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;
You never know what you can do until you try
متشکر. این کار برای یه پروژه خوب و کاربردیه(استفاده کردم)و لی بحٍ اصلی کامپوننت مورد نظره که دارم مینویسم. امیدوارم تموم که شد بزارم رو سایت. هرکی هم بتونه کمک کنه یا علی
[/quote]
...
If msg.wParam>0 then
...
البته بهتره از کد به صورت زیر استفاده بشه. چون تابعHiword مقدار cardinal برمیگردونه که همیشه مثبته![]()