1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

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

شروع موضوع توسط minaaa ‏21/10/11 در انجمن Delphi

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    [h=2][/h]
    تغییر 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;