delphi4arab منتديات دلفي للعرب

نسخة كاملة : التعامل مع DBGrid بإستخدام زر الماوس الاوسط
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله وبركاته

ماهو الحدث المجود في الـ DBGrid الذي يتعامل مع زر الماوس الاوسط ؟؟!
بارك الله فيكم وسلام عليكم
وعليكم السلام ورحمة الله وبركاته
الحدث 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; 
هناك مواضيع في المنتدى حول ذلك...
بالتوفيق.
بارك الله فيك أستاذي الكريم

لكن لم تعمل معي.
قمت بوضع هذا الكود داخل الحدث 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; 

إين الخلل ؟؟
لتوضيح : اقصد بزر الماوس الاوسط هو ذلك الدي يدور
السلام عليكم
إذا كنت تقصد استعمال زر الماوس الوسط للإنتقال بين السجلات ففي المرفقات مثال على ذلك وإن كنت تقصد غير ذلك فلا أدري
PHP كود :
procedure TForm1.DBGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
  
MousePos: TPoint; var Handled: Boolean);
begin
adotable1
.Next;
end; 
وفق الله الجميع
إقتباس :قمت بوضع هذا الكود داخل الحدث 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;
ولا أنصح بذلك...
بالتوفيق.
أستاذي يوجد عندي الحدث (استعمل sdbgrid التابع لي alphaskin)
[صورة: attachment.php?attachmentid=2611&stc=1&d=1272129212]
توقف اللسان عن التعبير(الله ينورك)
أستاذي لقد قمت بتعامل مع الاحداث التالية :

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:
في المرفق فيديو يظهر المشكلة
إقتباس :أستاذي يوجد عندي الحدث (استعمل sdbgrid التابع لي alphaskin)
قلت المكون TDBGrid الأصلي، هذا معدّل
لم تقل في البداية ذلك، وإلا لكان هناك ربما حل آخر...

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

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