ورود

View Full Version : مبتدی: پیمایش دی بی گرید با دکمه وسط ماوس



alireza.movahedian
پنج شنبه 30 خرداد 1392, 17:29 عصر
سلام دوستان
من از دلفی 7 استفاده می کنم
ممنون میشم به من بگید چه جوری می تونم با دکمه وسط ماموس دی بی گریدم رو پیمایش کنم

یوسف زالی
پنج شنبه 30 خرداد 1392, 21:52 عصر
سلام.
راه زیاد دارید.
ساده ترین راه استفاده از دو یونیت برای هک این کامپوننت هست.

یونیت اول برای اصلاحات:


unit HackedUnit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids;

type
THackedDBGrid = class(TDBGrid)
protected
procedure WndProc(var Message: TMessage); override;
end;

implementation

{ THackedDBGrid }

procedure THackedDBGrid.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_MOUSEWHEEL then
begin
Message.lParam := 0;
Message.Msg := WM_KEYDOWN;

If Message.wParam > 0 then // wheel roll up
Message.wParam := VK_UP
else // wheel roll down
Message.wParam := VK_DOWN;

SendMessage(Handle, Message.Msg, Message.wParam, Message.lParam); // go next or perior
Message.Msg := WM_KEYUP; // key up for refresh
end

else
inherited;
end;

end.


یونیت دوم برای هک:


unit ExtraGrid;

interface

uses HackedUnit;

type
TDBGrid = class(THackedDBGrid)
end;

implementation

end.


حالا کافیه در فرمهاتون هر جا که گرید دارید این یونیت رو به عنوان یونیت آخر Use کنید:



interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, ExtraGrid;



هک کامپوننت انجام شد!

alireza.movahedian
جمعه 31 خرداد 1392, 09:52 صبح
ممنون از راهنمایی تون
من چون مبتدی هستم حقیقتاً اصلاً متوجه نشدم
ولی برای سوالم یک جواب ساده تر پیدا کردم
از سربرگ additional یک application event روی فرم قرار می دهیم و در قسمت onmessage کد زیر رو قرار می دیم

procedure TForm28.ApplicationEvents1Message(var Msg: tagMSG;
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;

یوسف زالی
جمعه 31 خرداد 1392, 11:50 صبح
جفتش یکیه. ولی این طوری تمام کامپوننت هاتون حساس می شند.
راه اصولی ترش همونیه که در پست قبل گفتم. راه کاملا اصولی اون هم ساخت یک کامپوننته.
هر دو این کد ها دارن یک پیغام رو مدیریت می کنند. اون چیزی که شما روی فرم گذاشتید هم مدیریت همین مسیج ها رو به عهده داره.