2013-05-14 3 views
5

実行時に有効/無効になるチェックボックスがあります。私は、有効/無効にされている場合、異なるツールのヒントを表示したいだけです。 OnMouseEnterイベントをオーバーライドしてそこで処理することを考えていましたが、OnMouseEnterはコントロールが有効な場合にのみ呼び出されます。どのように私はその行動を達成することができますか?どんな助けもありがとう。無効なコントロールのヒントを表示するにはどうすればいいですか?

私は、フォームのONMOUSEMOVEを処理し、この

procedure Tdlg.pnlTopMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer); 
var 
    point: TPoint; 
    checkBoxCursorPos: TPoint; 
begin 
    inherited; 
    point.X := X; 
    point.Y := Y; 
    checkBoxCursorPos := chkBx.ScreenToClient(point); 
    if (PtInRect(chkBx.ClientRect, checkBoxCursorPos)) then 
    begin 
    if(chkBx.Enabled) then 
     chkBx.Hint := 'Enabled' 
    else 
     chkBx.Hint := 'Disabled' ; 

    Application.ShowHint := True; 
    end; 

end; 

ような何かをしようとしたが、条件PtinRectは満たされません。私は何を間違っているのですか?

+6

回避策は、グラフィックコントロールを配置することです。あなたのコントロールの背後にある空のイメージに、望ましいヒントを付けます。 – bummi

+0

checkBoxCursorPos:= chkBx.ScreenToClient(point)が正しくありません。 – Giel

+0

@ジール:実際のポジションを得るにはどうすればよいですか? – Jeeva

答えて

5

単純な解決策があります:空のTLabelをチェックボックスの上に置き、そのヒントを無効なチェックボックス状態の値に設定します。ラベルはAutoSizeをオフにする必要があり、BoundsRectプロパティをCheckBoxの位置とサイズに設定して位置とサイズを適用することができます。

CheckBoxを有効にすると、CheckBoxのヒントが使用されますが、CheckBoxが無効の場合は、そのラベルのヒントが使用されます。

更新:Bummiが彼のコメントで同様の考えを述べていることをちょうど見た。

+0

チェックボックスが無効になっているときに表示されるラベルのヒントと、チェックボックスが有効なときに表示されない方法を教えてください。ラベルの優先度は低くなりますか? – Jeeva

+0

要するに、TWinControlはTGraphicControlとしてより高い優先度を持っています。基本的な仕組みはもう少し複雑ですが。 –

+2

同様のやや異なるアプローチは、CheckBoxをHint'プロパティを空白にし、その 'ParentHint'プロパティをtrueに設定してから、パネルの' Hint'プロパティを使用します(これは、 'CheckBox.Enabled'の値)。 –

1

正式な回答:you can’t

回避策:あなたは(もちろん、無効にされないことを仮定して)フォームののMouseMoveイベントを使用して試みることができる、とマウスカーソルが関連するコントロールの上にある場合、適切なヒントを表示します。

+0

私は自分の質問を更新しました。私はmousemoveイベントを処理しています。それがコントロールを超えているかどうかを判断する方法を詳しく説明できますか? – Jeeva

関連する問題