2012-02-23 35 views
16

Nếu nhấn nút chuột và cửa sổ hiển thị cửa sổ đó sẽ nhận được sự kiện MouseUp khi nút chuột được nhả ra.Phát hiện nếu nút Chuột đã được nhấn trước khi biểu mẫu hiển thị

Có thể phát hiện, khi cửa sổ được hiển thị, có hay không một nút chuột đã được nhấn?

+0

bạn có thể muốn xem xét GetAsyncKeyState (VK_LBUTTON) – ComputerSaysNo

+5

Lưu ý rằng 'GetAsyncKeyState' trả về trạng thái nút chuột vật lý, trong khi' GetKeyState' trả về lôgic (liên quan đến những gì bạn đã đặt trong tùy chọn 'Chuyển chính và nút phụ' ở chuột cài đặt). – TLama

Trả lời

16

tôi sẽ cố gắng này:

procedure TForm1.FormShow(Sender: TObject); 
begin 
    if GetKeyState(VK_LBUTTON) and $8000 <> 0 then 
    ShowMessage('Left mouse button is pressed...') 
    else 
    ShowMessage('Left mouse button is not pressed...') 
end; 
+3

Cảm ơn, điều này là đúng .... gần như. Kết quả của GetKeyState cần phải được so sánh với $ 8000 (xem http://stackoverflow.com/a/3422706/41338) để kiểm tra xem các bit chính xác có được thiết lập hay không. – RobS

+0

Bạn chắc chắn đúng. Cảm ơn! Tôi sẽ cập nhật bài đăng. Xin lỗi vì đã gây hiểu lầm. – TLama

+2

+1 để giải thích CÁCH – EMBarbosa

9

Để trả lời câu hỏi của bạn trực tiếp, bạn có thể kiểm tra trạng thái nút chuột với GetKeyState hoặc GetAsyncKeyState. Mã khóa ảo bạn cần là VK_LBUTTON.

Sự khác biệt giữa các trường hợp này là GetKeyState báo cáo trạng thái tại thời điểm thư hiện đang xếp hàng đang hoạt động được đăng lên hàng đợi của bạn. Mặt khác, GetAsynchKeyState cung cấp cho bạn trạng thái ngay lập tức mà bạn gọi GetAsynchKeyState.

Từ các tài liệu của GetKeyState:

Tình trạng chìa khóa trở về từ chức năng này thay đổi như một sợi chỉ đọc thông điệp chính từ hàng đợi thông điệp của nó. Trạng thái không phản ánh trạng thái ngắt liên kết với phần cứng. Sử dụng hàm GetAsyncKeyState để truy xuất thông tin đó. Ứng dụng gọi GetKeyState để trả lời tin nhắn nhập bằng bàn phím. Hàm này lấy trạng thái của khóa khi thông báo đầu vào được tạo ra.

Tôi nghi ngờ bạn nên sử dụng GetKeyState nhưng tôi không chắc chắn 100% vì tôi không thực sự biết những gì bạn đang cố gắng đạt được với thông tin này.

+0

Cảm ơn lời giải thích hữu ích về sự khác biệt giữa hai hàm. Bạn chính xác trong đó GetKeyState là những gì tôi cần. Các thông tin bổ sung ngu si đần độn là tại sao tôi cần điều này là tôi đang tạo ra một hình thức có đầu ra dựa trên nút chuột cuối cùng được phát hành. Ban đầu tôi đã đếm các nút chuột khi chúng được nhấn và đếm chúng ra như được phát hành nhưng đôi khi một trong các nút chuột có thể được nhấn trước khi biểu mẫu được hiển thị. Tuy nhiên, lệnh này có nghĩa là bây giờ tôi có thể kiểm tra mỗi sự kiện mouseup cho dù bất kỳ nút chuột nào khác vẫn được nhấn. – RobS

+2

+1 để giải thích TẠI SAO – EMBarbosa

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