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

كيفية بحث بتحسس والماوس على السجل

بدأه king_baghdad في 19 يونيو 2008 · 4 رد · 789 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم:

اخواني في المنتدى ارجو افادتي بكيفية بحث داخل جدول ومؤشر الماوس موضوع على سجل معين مثلا عندنا جدول يحتوى على اسماء الزبائن ونريد البحث عن اسم زبون حيث يتم البحث ومؤشر الماوس موضوع على سجل معين حيث عند كتابة حرف معين والمؤشر على سجل معين يتم الانتقال على السجل الاقرب للبحث فهل من احد يدلنا على اسم الحدث الذي يفي بالغرض هل هي في احداث ال dbgrid هل من احد يساعدني .

#2

السلام عليكم...

إليك هذا الكود الذي يحقق المطلوب:

procedure TForm1.Edit1Change(Sender: TObject);
var
	Coordinates: TGridCoord;
	APoint: TPoint;
begin
	if Trim(Edit1.Text) <> '' then begin
		// نتأكد من وجود مؤشر الفأرة فوق DBGrid:
		if WindowFromPoint(Mouse.CursorPos) = DBGrid1.Handle then begin
			// تغيير قيم موقع مؤشر الفأرة من إحداثيات الشاشة إلى إحداثيات DBGrid:
			APoint := DBGrid1.ScreenToClient(Mouse.CursorPos);
			// الحصول على رقم العمود و رقم الصف الموجودين تحت مؤشر الفأرة.
			// X = رقم العمود, Y = رقم الصف
			// ملاحظة: المنهج MouseCoord يعتبر أن العمود الثابت هو العمود رقم 0، و أن الصف الثابت هو الصف رقم 0
			Coordinates := DBGrid1.MouseCoord(APoint.X, APoint.Y);
			if Coordinates.X > 0 then begin
				// Coordinates.X = 0  ==> مؤشر الفأرة فوق العمود الثابت - عمود مؤشر السجلات
				// Coordinates.X = -1 ==> مؤشر الفأرة خارج أي عمود
				try
					// With Fields property, the first NON-FIXED column is Col 0:
					DBGrid1.DataSource.DataSet.Locate(DBGrid1.Fields[Coordinates.X - 1].FieldName, Edit1.Text, [loCaseInsensitive, loPartialKey]);
				except
				end;
			end;
			end
		else
			MessageDlg('مؤشر الفأرة خارج جدول البيانات', mtInformation, [mbOK], 0);
	end;
end;

ملاحظة 1: إذا أردت استخدام Coordinates.Y لتحديد رقم الصف فإن الـ DBGrid تتصرف بطريقة مختلفة مع الصفوف عنها مع الأعمدة، حيث تعتبر دائماً أن أول صف ظاهر في أعلى الـ DBGrid هو الصف رقم 1، بمعنى إذا كانت الـ DBGrid تحتوي على 100 سجل مثلاً و كان حجم الـ DBGrid العمودي يسمح بعرض 8 سجلات فقط فإن Coordinates.Y تقول أن أول صف ظاهر في الأعلى هو الصف رقم 1 و أن آخر صف ظاهر في الأسفل هو الصف رقم 8 و ذلك لأن الخاصية هذه تتعامل مع عدد الصفوف المعروضة و ليس مع سجلات الجدول.

ملاحظة 2: الإجراء يعمل سواء أكانت BiDiMode من اليسار إلى اليمين أو العكس، و كذلك يعمل بطريقة صحيحة حتى لو تم تغيير ترتيب الأعمدة (سحب عمود بالفأرة ونقله إلى موضع آخر).

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

شكراً اخي العزيز على الجواب ، ولكن نفذت ما اتيت به ولكن الحدث موجود اولاً في حدث onchange في ال edit ولكن لا يعمل الكود كما اوضحت في سؤالي بالبحث فوق السجل يعني لو كان المؤشر على اي سجل وكتبنا اسم علي يذهب المؤشر الي السجل علي .. اتمنى ان تكون فهمت الفكرة وشكراً لك واتمنى المشاركة من باقي الاعضاء .

#4

السلام عليكم...

الحقيقة عندي نية أفهم المطلوب! الكود الذي كتبته سابقاً يعمل كما في الصورة أدناه.

post-28631-1213981275_thumb.gif

إذا كان المطلوب غير ذلك فالرجاء التوضيح بتفصيل أكثر، و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#5

حسنا اخ ناجي شكراً على كل جهودك وإن شاء الله اتمنى التواصل .. المطلوب هو اريد البحث بواسطة "" عندما يكون مؤشر الماوس واقف على سجل داخل ال dbgrid وعند كتابة داخل السجل مثلاً احمد يذهب مباشرة على السجل احمد ويكون التحسس بواسطة الحدث onkeypress هذا عرفته قبل قليل ولكن اتمنى ان تساعدني في الباقي واتمنى مشاركة اعضاء النادي الآخرين ...شكري لك

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…