التعامل مع DBGrid بإستخدام زر الماوس الاوسط
#1
السلام عليكم ورحمة الله وبركاته

ماهو الحدث المجود في الـ DBGrid الذي يتعامل مع زر الماوس الاوسط ؟؟!
بارك الله فيكم وسلام عليكم
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#2
وعليكم السلام ورحمة الله وبركاته
الحدث 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;

    
Handled := False;
  
end;
end; 
هناك مواضيع في المنتدى حول ذلك...
بالتوفيق.
الرد
#3
بارك الله فيك أستاذي الكريم

لكن لم تعمل معي.
قمت بوضع هذا الكود داخل الحدث OnMouseWheel لكن كان شيئا لم يحدث

PHP كود :
TC.Filter:='TC_TG_ID='+inttostr(TGTG_ID.AsInteger);
  
TC.Filtered:=True;

  
edt1.Text:=TGTG_NOM.Value;
  
sbtn1.Caption:='Modifier';
  
sbtn1.ImageIndex:=1;
  
sbtn3.Enabled:=True; 

إين الخلل ؟؟
لتوضيح : اقصد بزر الماوس الاوسط هو ذلك الدي يدور
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#4
السلام عليكم
إذا كنت تقصد استعمال زر الماوس الوسط للإنتقال بين السجلات ففي المرفقات مثال على ذلك وإن كنت تقصد غير ذلك فلا أدري
PHP كود :
procedure TForm1.DBGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
  
MousePos: TPoint; var Handled: Boolean);
begin
adotable1
.Next;
end; 
وفق الله الجميع
الرد
#5
إقتباس :قمت بوضع هذا الكود داخل الحدث 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; 
ثم أضف في ملف المشروع (dpr.*) الآتي:
كود :
Application.Initialize; [color=Blue] Application.OnMessage := Form1.OnMessage;[/color] Application.CreateForm(TForm1, Form1);
باختصار، ما فعلناه هو اقتناص حدث تدوير عجلة الماوس إلى الأعلى وإلى الأسفل
وإرسال حدثين بدلا من ذلك هما ضغط المفتاح "فوق" (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;
ولا أنصح بذلك...
بالتوفيق.
الرد
#6
أستاذي يوجد عندي الحدث (استعمل sdbgrid التابع لي alphaskin)
[صورة: attachment.php?attachmentid=2611&stc=1&d=1272129212]
توقف اللسان عن التعبير(الله ينورك)


الملفات المرفقة
.jpg   Sdbgrid.jpg (الحجم : 9.88 ك ب / التحميلات : 83)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#7
أستاذي لقد قمت بتعامل مع الاحداث التالية :

PHP كود :
procedure TStockFrm.sDBGrid1KeyDown(Sender: TObject; var Key: Word;
  
Shift: TShiftState);
begin
  TC
.Filter:='TC_TG_ID='+inttostr(TGTG_ID.AsInteger);
  
TC.Filtered:=True;

  
edt1.Text:=TGTG_NOM.Value;
  
sbtn1.Caption:='Modifier G';
  
sbtn1.ImageIndex:=1;
  
sbtn3.Enabled:=True;
end; 
PHP كود :
procedure TStockFrm.sDBGrid1KeyUp(Sender: TObject; var Key: Word;
  
Shift: TShiftState);
begin
  TC
.Filter:='TC_TG_ID='+inttostr(TGTG_ID.AsInteger);
  
TC.Filtered:=True;

  
edt1.Text:=TGTG_NOM.Value;
  
sbtn1.Caption:='Modifier G';
  
sbtn1.ImageIndex:=1;
  
sbtn3.Enabled:=True;
end; 
PHP كود :
procedure TStockFrm.sDBGrid1MouseWheel(Sender: TObject; Shift: TShiftState;
  
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  TC
.Filter:='TC_TG_ID='+inttostr(TGTG_ID.AsInteger);
  
TC.Filtered:=True;

  
edt1.Text:=TGTG_NOM.Value;
  
sbtn1.Caption:='Modifier G';
  
sbtn1.ImageIndex:=1;
  
sbtn3.Enabled:=True;
end; 

الحمد الله عملت لكن خرج لي مشكل اخر وهو :
-عند تدوير الزر الى الاسفل يصبح يشير الى السجل الثاني لكن العملية تجرا على السجل الاول و العكس صحيح هههههههه هبلني :angry:
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#8
في المرفق فيديو يظهر المشكلة


الملفات المرفقة
.rar   video.rar (الحجم : 108.73 ك ب / التحميلات : 28)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#9
إقتباس :أستاذي يوجد عندي الحدث (استعمل sdbgrid التابع لي alphaskin)
قلت المكون TDBGrid الأصلي، هذا معدّل
لم تقل في البداية ذلك، وإلا لكان هناك ربما حل آخر...

إقتباس :إذا كنت تقصد استعمال زر الماوس الوسط للإنتقال بين السجلات
تم إصلاح هذا الخلل في إصدارات دلفي الأخيرة فلا داعي لذلك (2009 فما فوق -على الأقل-)

إقتباس :الحمد الله عملت لكن خرج لي مشكل اخر وهو :
لا تستخدم هذه الأحداث sDBGrid1KeyUp، sDBGrid1KeyDown خاصة sDBGrid1MouseWheelUp
الرد
#10
أستاذي لقد قمت بتعديل المشاركة السابقة وهل رئية الفيديو
وما هو الحل ؟؟؟؟
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم