|
تغییر 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;
همه کارها انجام شد. حالا شما میتوانید نتیجه را مشاهده کنید
|