PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش برنامه نوسي دلفی- <تغییر Hint برای هر ستون از DBGrid در دلفی > قسمت ششم



Borna66
01-02-2010, 03:39 PM
تغییر Hint برای هر ستون از DBGrid در دلفی
ابتدا باید یک عنصر جدید مبتنی بر TDBGrid ایجاد کنید و رویداد OnMouseMove را فراخوانی کنید:



type
TMyDBGrid = class(TDBGrid)
published
property OnMouseMove;
end;




اگرچه شما در رویداد OnMouseMove مختصات X و Y را بدست خواهید آورد، اما شما باید ستون مورد نظر را پیدا کنید. برای ادامه کار لازم است که سطر زیر را در قسمت protected قرار دهید:




procedure WMMouseMove(var Message : TWMMouse); message WM_MOUSEMOVE;همچنین متغیر های زیر را در قسمت public اضافه نمایید:




MouseRow : integer; MouseCol : integer;بنابراین متد WMMouseMove بصورت ریر خواهد بود:



procedure TMyDBGrid.WMMouseMove(var Message : TWMMouse);
var
t : TGridCoord;
begin
t := MouseCoord(Message.XPos, Message.YPos);
MouseCol := t.x;
MouseRow := t.y;
inherited;
end;


ما ابتدا فیلدهای XPost و YPos را از ساختار WMMouseMove تنظیم میکنیم:




procedure TForm2.MyDBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer);
begin
if (((dgIndicator in MyDBGrid1.Options) and (MyDBGrid1.MouseCol > 0)) or
((not (dgIndicator in MyDBGrid1.Options)) and (MyDBGrid1.MouseCol <> -1)))
and (MyDBGrid1.MouseCol <> OldMouseCol) then begin
OldMouseCol := MyDBGrid1.MouseCol;
if dgIndicator in MyDBGrid1.Options then
MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol - 1].FieldName
else
MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol].FieldName;
end;
end;


حالا مجددا" تعریف زیر را در قسمت public قرار دهید:




HintMouseMessage(Control : TControl; var Message : TMessage)در قسمت OnMouseMove از TDBGrid نیز فرامین زیر را اضافه نمایید:




var
r : TMessage;
begin

Application.HintMouseMessage(self, r);
TWMMouse(r).XPos := X;
TWMMouse(r).YPos := Y;
Application.HintMouseMessage(MyDBGrid1, r);
end;
همه کارها انجام شد. حالا شما میتوانید نتیجه را مشاهده کنید