2013-05-14 11 views
5

Mam pole wyboru, które będzie włączone/wyłączone w czasie wykonywania. Chcę wyświetlać różne porady narzędziowe, jeśli są włączone/wyłączone. Myślałem o nadpisaniu zdarzenia OnMouseEnter i obsłudze go, ale OnMouseEnter będzie wywoływane tylko wtedy, gdy kontrola jest włączona. Jak mogę osiągnąć to zachowanie? Każda pomoc będzie doceniona.Jak wyświetlić podpowiedź dla wyłączonego formantu?

Próbowałem poradzić onmousemove formy i zrobić coś takiego

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; 

ale PtinRect warunek nie jest spełniony. Co robię źle?

+6

Obejście polegałoby na umieszczeniu sterowania graficznego, np. pusty obraz za twoją kontrolą z żądaną wskazówką. – bummi

+0

checkBoxCursorPos: = chkBx.ScreenToClient (punkt) nie jest poprawny. – Giel

+0

@Giel: Co powinienem zrobić, aby uzyskać rzeczywistą pozycję? – Jeeva

Odpowiedz

5

Istnieje proste rozwiązanie: umieść pusty znacznik wyboru nad polem wyboru i ustaw jego wskazówkę na wartość wyłączonego stanu pola wyboru. Etykieta musi mieć wyłączoną funkcję AutoSize, a możesz wymusić pozycję i rozmiar, ustawiając właściwość BoundsRect na właściwość CheckBox.

Po włączeniu modułu CheckBox używana jest wskazówka pola wyboru, a podpowiedź etykiety jest używana, gdy blok kontrolny jest wyłączony.

Aktualizacja: właśnie zobaczyłem, że Bummi wspomina podobny pomysł w swoim komentarzu.

+0

W jaki sposób podpowiedź etykiety wyświetlana, gdy pole wyboru jest wyłączone i jak jest ukryta, gdy jest zaznaczone pole wyboru? Czy etykieta ma mniejsze preferencje? – Jeeva

+0

W skrócie: tak, TWinControl ma wyższe preferencje jako TGraphicControl. Chociaż podstawowy mechanizm jest nieco bardziej skomplikowany. –

+2

Podobnym, ale nieco odmiennym podejściem byłoby umieszczenie CheckBoxa wewnątrz panelu, zachowanie właściwości CheckBox 'Hint' i jej właściwości' ParentHint' ustawionej na true, a następnie użycie właściwości 'Hint' panelu (która wyświetli się niezależnie od wartość 'CheckBox.Enabled'). –

1

Oficjalna odpowiedź: you can’t.

Sposób obejścia: można spróbować użyć zdarzenia 2 MouseMove formularza (zakładając, że nie zostanie ono wyłączone, oczywiście), a jeśli kursor myszy znajdzie się nad odpowiednią kontrolką, wyświetl odpowiednią podpowiedź.

+0

Mam zaktualizowane moje pytanie. Obsługuję zdarzenie mousemove. czy możesz opracować, jak ustalić, czy jest nad kontrolą? – Jeeva

Powiązane problemy