2011-10-14 32 views
2

我認爲我實現了列標題提示到我自己的DBGrid。 這似乎很簡單 - 我想。Delphi:DBGrid列標題提示 - 強制重置提示?

我加入

TitleHints:字符串列表

包含此格式信息:

名=值

name是(0-99),用於非基於場的列,以及基於字段的列的字段名稱。 值是列的提示,crlf是\ n。

一切正常,OnMouseMove是基於位置的提示。

但是:只顯示第一個提示,下一個不是。 我認爲這是因爲提示機制在鼠標到達「控制」時激活...當我離開控制,並再次來,我得到另一個提示 - 一次。 無論我設置ShowHint關閉。

因爲我不想創建自己的HintWIndow(如果可能),所以我搜索了一種方法將提示機制重置爲應用程序相信:這是此控件中的第一種情況。 我可以做任何方式,如「發送信息」,或者如果存在等,請致電「取消提示」等。

你知道這種方式嗎?

感謝您的幫助,祝您有美好的一天!

問候: DD

回答

3

您可以重新激活提示您覆蓋MouseMove,如:

type 
    TDBGrid = class(DBGrids.TDBGrid) 
    private 
    FLastHintColumn: Integer; 
    protected 
    procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; 
    function GetColumnTitleHint(Col: Integer): string; 
    procedure MouseMove(Shift: TShiftState; X: Integer; Y: Integer); override; 
    public 
    constructor Create(AOwner: TComponent); override; 
    end; 


procedure TDBGrid.CMHintShow(var Message: TCMHintShow); 
var 
    Cell: TGridCoord; 
begin 
    if not Assigned(Message.HintInfo) or not (dgTitles in Options) then 
    inherited 
    else 
    begin 
    Cell := MouseCoord(Message.HintInfo^.CursorPos.X, Message.HintInfo^.CursorPos.Y); 
    if Cell.Y = 0 then 
    begin 
     FLastHintColumn := Cell.X - 1; 
     Message.HintInfo^.HintStr := GetColumnTitleHint(FLastHintColumn); 
    end 
    else 
     FLastHintColumn := -1; 
    end; 
end; 

function TDBGrid.GetColumnTitleHint(Col: Integer): string; 
begin 
    Result := Columns[Col].Title.Caption + ' hint'; 
end; 

procedure TDBGrid.MouseMove(Shift: TShiftState; X, Y: Integer); 
var 
    Cell: TGridCoord; 
begin 
    inherited MouseMove(Shift, X, Y); 
    if dgTitles in Options then 
    begin 
    Cell := MouseCoord(X, Y); 
    if Cell.Y = 0 then 
    begin 
     if Cell.X - 1 <> FLastHintColumn then 
     Application.ActivateHint(Mouse.CursorPos); 
    end 
    else 
     Application.CancelHint; 
    end; 
end; 

constructor TDBGrid.Create(AOwner: TComponent); 
begin 
    inherited Create(AOwner); 
    FLastHintColumn := -1; 
end; 

GetColumnTitleHint僅僅是一個例子,你應該實現它從你的TitleHints屬性返回正確的值。

希望這會有所幫助。