الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح كيفية إصلاح خطأ تعامل Dbgrid مع عجلة الماوس

مغلق
بدأه محمد كمال في 29 أغسطس 2007 · 3 رد · 1,973 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

يعتبر التحكم في القوائم الطويلة (قوائم مع scroolbar) بواسطة عجلة الماوس MouseWheel مهما جدا، ومن ضمنها طبعا DBGrid، ولكن للأسف فـ DBGrid لاتدعمه بشكل كامل، أنظر إلى الصورة :

post-131597-1188339148_thumb.gif

سنتابع في هذا الشرح كيفية إصلاح المشكلة. على بركة الله :

لكي تصبح الـ DBGrid تدعم الـ MouseWheel بشكل جيد نقوم باستبدال WindowProc الخاص بـ DBGrid بإجراء آخر من أجل معالجة الرسالة WM_MOUSEWHEEL

طبعا أول شيء أضف DBGrid و DateSource و...و...

ثانيا قم بإضافة التصريحين التاليين

type
  TForm1 = class(TForm)
	DBGrid1 : TDBGrid;
	 ...
  private
	OldWindowProc: TWndMethod;					   // هذا
	Procedure DBGridNewWindowProc(var Msg: TMessage);// و هذا
	 ...
  End;

ثم قم بإضافة الكود التالي إلى الحدث OnCreate للفورم

procedure TForm1.FormCreate(Sender: TObject);
begin
  // حفظ إجراء WndProc الحالي لـ DBGrid1.
  OldWindowProc := DBGrid1.WindowProc;
  // إسناد الإجراء الجدبد.
  DBGrid1.WindowProc := DBGridNewWindowProc;
end;

ثم نقوم بتعريف الإجراء الجديد الذي يقوم بتنفيذ الأمر Next للتقدم في الجدول عند دوران العجلة في اتجاه

والأمر Prior عند دورانها في الاتجاه الآخر

procedure TForm1.DBGridNewWindowProc(var Msg: TMessage);
begin
  // تمييز الرسالة WM_MOUSEWHEEL.
  if Msg.Msg = WM_MOUSEWHEEL then
  begin
	if (DBGrid1.DataSource.DataSet.Active) then
	begin
	  if SmallInt(Msg.WParamHi) < 0 then
		DBGrid1.DataSource.DataSet.Next // إلى الأسفل
	  else
		DBGrid1.DataSource.DataSet.Prior;// إلى الأعلى

	end;
	Exit;
  end;

  //معالجة الرسائل الأخرى بالإجراء القديم وهذا ضروري
  OldWindowProc(Msg);
end;

الخطوة الأخيرة وهي التنفيذ :D

والآن سوف تجد الماوسويل تعمل بشكل كامل

وفقكم الله والسلام عليكم

#2

اشكرك أخ "محمد كمال" من أعماق قلبي على هذه المعلومة الرائعة، فقط كنت أعاني من هذه المشكلة.

شكرا لك مرة أخرى :)

#3

الله هم تقبل منه

جيد اخي بارك الله فيك

لكني اعمل على دلفي 2006 و 2005 ولم اري هده المشكلة اطلاقا .

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 29 أغسطس 2007 في 10:50

#4
اقتباس
اشكرك أخ "محمد كمال" من أعماق قلبي على هذه المعلومة الرائعة، فقط كنت أعاني من هذه المشكلة.

أهلا بك في أي وقت

اقتباس
لكني اعمل على دلفي 2006 و 2005 ولم اري هده المشكلة اطلاقا .

فعلا فقد رأيت هذه المشكلة في Delphi 7,5 وربما 6 و 8

سلام

هذا الموضوع مغلق.

مواضيع مشابهة