2013-05-14 41 views
5

Tôi có một hộp kiểm sẽ được bật/tắt trong thời gian chạy. Tôi chỉ muốn hiển thị các mẹo công cụ khác nhau nếu nó được bật/tắt. Tôi đã suy nghĩ về sự kiện OnMouseEnter trọng và xử lý nó ở đó nhưng OnMouseEnter sẽ được gọi chỉ khi điều khiển được kích hoạt. Làm thế nào tôi có thể đạt được hành vi đó? Bất kỳ trợ giúp sẽ được đánh giá cao.Làm cách nào để hiển thị gợi ý cho điều khiển bị vô hiệu hóa?

tôi đã cố gắng để xử lý OnMouseMove của mẫu và làm điều gì đó như thế này

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; 

nhưng PtinRect điều kiện là không hài lòng. Những gì tôi đang làm sai?

+6

Giải pháp thay thế sẽ đặt điều khiển đồ họa, ví dụ: một hình ảnh trống phía sau kiểm soát của bạn với gợi ý mong muốn. – bummi

+0

checkBoxCursorPos: = chkBx.ScreenToClient (điểm) không đúng. – Giel

+0

@Giel: Tôi nên làm gì để có được vị trí thực tế? – Jeeva

Trả lời

5

Có một giải pháp đơn giản: đặt TLabel trống trên hộp kiểm và đặt Gợi ý của nó thành giá trị cho trạng thái hộp kiểm bị tắt. Nhãn phải được AutoSize tắt và bạn có thể thực thi vị trí và kích thước bằng thuộc tính BoundsRect được đặt cho hộp kiểm của CheckBox.

Khi hộp kiểm được bật thì Gợi ý của hộp kiểm được sử dụng, trong khi Gợi ý của Nhãn được sử dụng khi Hộp kiểm bị tắt.

Cập nhật: chỉ thấy rằng Bummi đề cập đến một ý tưởng tương tự trong nhận xét của mình.

+0

Làm thế nào để gợi ý nhãn được hiển thị khi hộp kiểm bị vô hiệu hóa và làm thế nào nó được ẩn khi hộp kiểm được kích hoạt? Nhãn có được ưu tiên ít hơn không? – Jeeva

+0

Tóm lại: có, TWinControl có ưu tiên cao hơn là một TGraphicControl. Mặc dù cơ chế cơ bản phức tạp hơn một chút. –

+2

Cách tiếp cận tương tự nhưng hơi khác nhau là đặt Hộp kiểm bên trong bảng điều khiển, giữ thuộc tính CheckBox 'Hint' trống và thuộc tính' ParentHint' được đặt thành true, sau đó sử dụng thuộc tính 'Hint' của bảng điều khiển thay thế (sẽ hiển thị bất kể giá trị của 'CheckBox.Enabled'). –

1

Câu trả lời chính thức: you can’t.

Giải pháp thay thế: bạn có thể thử sử dụng hình thức MouseMove-sự kiện (giả sử điều đó sẽ không bị vô hiệu), và nếu con trỏ chuột trên điều khiển thích hợp, hãy hiển thị gợi ý thích hợp.

+0

Tôi đã cập nhật câu hỏi của mình. tôi đang xử lý sự kiện mousemove. bạn có thể giải thích làm thế nào để xác định nếu nó là trên sự kiểm soát? – Jeeva

Các vấn đề liên quan