وعليكم السلام ورحمة الله وبركاته
الحدث OnMouseWheel من رسالة ويندوز WM_MOUSEWHEEL
يمكنك صنعه بنفسك، مثال:
PHP كود :
Author: Zarko Gajic
{ Mouse wheel behaves strangely with dbgrids - this code handler will correct this behavior. Just drop a TApplication component on a form }
procedure Application1.OnMessage (var Msg: TMsg; var Handled: Boolean); var i: SmallInt; begin 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;
إقتباس :قمت بوضع هذا الكود داخل الحدث OnMouseWheel لكن كان شيئا لم يحدث
هذا الحدث غير متوفر في المكون TDBGrid الأصلي، عليك برمجته بنفسك
طريقة أخرى للتأثير على كامل المشروع:
عرف في القسم public لأي نموذج، وليكن TForm1 مثلا:
PHP كود :
public procedure OnMessage(var Msg: TMsg; var Handled: Boolean);
مضمون الحدث:
PHP كود :
procedure TForm1.OnMessage(var Msg: TMsg; var Handled: Boolean); var i: SmallInt; begin 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; end;
باختصار، ما فعلناه هو اقتناص حدث تدوير عجلة الماوس إلى الأعلى وإلى الأسفل
وإرسال حدثين بدلا من ذلك هما ضغط المفتاح "فوق" (VK_UP) و"تحت" (VK_DOWN) على التوالي
أما إن كنت تقصد حدث النقر على الزر الأوسط (وليس تدوير العجلة)
فهذا ممكن باستخدام Button: TMouseButton من خلال OnMouseDown أو OnMouseUp
كود :
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbMiddle then
ShowMessage('Mouse Middle button clicked!');
end;
الحمد الله عملت لكن خرج لي مشكل اخر وهو :
-عند تدوير الزر الى الاسفل يصبح يشير الى السجل الثاني لكن العملية تجرا على السجل الاول و العكس صحيح هههههههه هبلني :angry:
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح