2011-07-14 42 views
5

Làm cách nào để mô phỏng sự kiện nhấn phím giả mạo trong Haskell?Làm cách nào để mô phỏng sự kiện nhấn phím giả mạo trong Haskell?

Tôi có bàn phím số trên màn hình trong Gui mà tôi muốn sử dụng để viết vào một số mục nhập văn bản trong cửa sổ. Bàn phím được tạo thành từ các tiện ích nút và những gì tôi muốn làm là xử lý onButtonClicked gửi keyPressEvent sao cho số/chữ thích hợp được ghi vào mục văn bản có tiêu điểm. Tôi bắt đầu bằng cách xem Graphics.UI.Gtk.Gdk.Events và thực hiện một sự kiện nhấn phím

Event my1Event = Key True True Graphics.UI.Gtk.Gdk.Events.currentTime [] False False False 0xffb1 "KP_1" Nothing 

Tôi không thể tìm ra cách gửi sự kiện này. Dù sao thì hóa ra Sự kiện sẽ không còn được dùng nữa và nên sử dụng EventM. Tôi đã tìm thấy widgetEvent :: WidgetClass self => self -> EventM t Bool trong Graphics.UI.Gtk.Abstract.Widget. Trong api nó nói:

Hàm hiếm khi được sử dụng. Chức năng này được sử dụng để phát ra tín hiệu sự kiện trên một widget (những tín hiệu đó sẽ không bao giờ được phát ra mà không sử dụng chức năng này để làm như vậy). Nếu bạn muốn tổng hợp một sự kiện mặc dù, không sử dụng chức năng này; thay vào đó, hãy sử dụng mainDoEvent để sự kiện sẽ hoạt động như thể nó nằm trong hàng đợi sự kiện.

Vì vậy, tôi đã xem mainDoEvent :: EventM t() trong Graphics.UI.Gtk.General.General nhưng không chắc chắn về cách sử dụng EventM để tạo phím bấm và không thể tìm thấy ví dụ về mainDoEvent đang sử dụng. Ai cũng có thể tư vấn cho tôi cách tạo sự kiện nhấn phím bằng cách sử dụng EventM và chuyển nó tới mainDoEvent hoặc một số cách khác để thực hiện việc này? Cảm ơn.

+5

Câu hỏi này có lẽ nhiều hơn về GTK so với Haskell. Xem [ở đây] (http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event) cho API cơ bản, dường như được hiển thị thông qua trình bao bọc FFI tầm thường trong này trường hợp. –

Trả lời

1

Tạo sự kiện là Đường sai. Thay vào đó, bạn nên chèn văn bản của mình bằng cách sử dụng hàm thích hợp cho tiện ích văn bản của bạn. Ví dụ: đối với TextBuffer s, hãy sử dụng textBufferInsertAtCursor.

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