2016-09-28 4 views
1

유지 관리중인 응용 프로그램은 DevExpress의 고대 구성 요소를 사용합니다.이 구성 요소는 현재 그리드 컨트롤 (TdxMasterView)을 사용했습니다. 내가 할 수있게하려면 현재 셀의 텍스트를 표시하는 툴팁이 있어야하지만이 구성 요소에는 OnHint 이벤트가 노출되지 않습니다.타사 구성 요소에 OnHint와 같은 기능 추가

MouseMove 이벤트를 사용하여 필요한 기능을 사용할 수 있었지만 코드에서 마우스 커서를 셀로 변환 한 다음 내용을 검색해야하므로이 코드는 이벤트에 너무 많은 코드라고 생각합니다. 는 너무 자주 해고됩니다 (작동시 너무 느려지지는 않지만).

자체가 TCustomControl에서 파생 구성 요소, 그래서 나는 내가 원하는 생각하지만 어떤 기본 HintShowHint 특성을 가지고는 노출 또는 (힌트 거품이 표시 될 경우에만 실행됩니다 이벤트를 추가하거나 할 수있다 즉 OnHint 이벤트 또는 이와 동등한 이벤트). 올바른 텍스트를 얻으려면 마우스의 X 및 Y 좌표 만 있으면됩니다. 이것은 TControlAction에 묶여있는 것처럼 보입니다.하지만 코드가 처음 보게되면 즉시 명확하지 않고 구성 요소에 의해 노출되지 않기 때문에 이것이 어떻게 작동하는지 완전히 확신 할 수 없습니다.

누구나 비슷한 것을 얻은 예제 코드가 있습니까? 기본 소스에 액세스 할 수 있으므로 필요에 따라 비트를 수정할 수 있습니다 (DevExpress는이 코드에 대한 업데이트를 공개하지 않으므로이를 수행하는 일반적인 위험이 실제로 적용되지 않습니다). 그러나 헬퍼 함수로 작업하는 것을 선호합니다. , 가능하면 Windows 메시지 또는 일종의 장식 자.

다른 옵션은 이벤트를 활성화/비활성화하는 타이머를 가지고 있다고 가정합니다. 그러나 이는 약간 짜증나는 (단순한 경우) 해결책으로 보입니다.

+0

Devex는 이것에 대해 무엇을 말합니까? 그들은 분명한 사람들입니까? – MartynA

+0

일반적으로 동의 하겠지만이 구성 요소는 너무 오래되어 지원되는 초기 버전을 벗어날 수 있습니다. 나는 그들의 cxGrid 구성 요소들로만 그것들을 알았지 만, 이것은 그것보다 우선합니다. –

답변

2

코드에 procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;을 구현하십시오.

procedure TMyComponent.CMHintShow(var Message: TCMHintShow); 
var 
    CellIdx: Integer; 
    Handled: Boolean; 
    HintStr: string; 
    LHintInfo: PHintInfo; 
begin 
    Message.Result := 1; // Don't show the hint 
    if Message.HintInfo.HintControl = Self then 
    begin 
    with Message.HintInfo.CursorPos do 
    begin 
     CellIdx := ImageAtPos(X, Y); 
    end; 

    Handled := False; 
    HintStr := ''; 
    if Assigned(FOnGetHint) then 
     FOnGetHint(Self, CellIdx, HintStr, Handled); 
    LHintInfo := Message.HintInfo; 
    if (CellIdx <> -1) then 
    begin 
     if not Handled then 
     HintStr := Hint; 
     LHintInfo.CursorRect := GetCellRect(CellIdx); 
     Handled := True; 
    end; 
    if Handled then 
    begin 
     LHintInfo.HintStr := HintStr; 
     Message.Result := 0; // Show the hint 
    end; 
    end; 
end; 
+0

고마워요. 내일이면 금방 갈거야. –

+0

또는 구성 요소 자체를 편집 할 수 없으면 'TApplication.OnShowHint' 또는'TApplicationEvents.OnShowHint' 이벤트를 사용하십시오. –