تغییر Hint برای هر ستون از DBGrid در دلفی

 

تغییر 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;


همه کارها انجام شد. حالا شما میتوانید نتیجه را مشاهده کنید.

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد