2011-06-29 93 views
2

我在lablgtk2中遇到了很多test_modifier方法的問題。我可以測試Shift,但這對我的目的不是很有用。每當我測試控制和另一個鍵被按下時,什麼都不會發生。我也試過這個:檢查lablgtk2中是否按下了「control」

view#event#connect#key_press ~callback:(fun ev -> 
    let m = GdkEvent.Key.state ev in 
    let k = GdkEvent.Key.keyval ev in 
     if (m = [`CONTROL] && k = _F) then 
      ... 

它工作了一段時間,然後停止。上面的代碼有什麼問題,它不會做任何事情?如何正確測試lablgtk2中的Control鍵?

回答

3

一次可以有幾個修飾符,因此與[`CONTROL]比較無效。

let pr fmt = Printf.ksprintf print_endline fmt 

let button label packing f = 
    let b = GButton.button ~label ~packing() in 
    let _ = b#connect#clicked ~callback:f in 
() 

let() = 
    let locale = GtkMain.Main.init() in 
    let window = GWindow.window ~title:"test" ~border_width:10() in 
    let _ = window#connect#destroy ~callback:GMain.quit in 
    let mainbox = GPack.vbox ~packing:window#add() in 
    button "quit" mainbox#pack window#destroy; 

    let _ = window#event#connect#key_press ~callback:begin fun ev -> 
    let m = GdkEvent.Key.state ev in 
    let k = GdkEvent.Key.keyval ev in 
    if (List.mem `CONTROL m && k = GdkKeysyms._F) then pr "WOO HOO"; 
    if (List.mem `CONTROL m && k = GdkKeysyms._f) then pr "woo hoo"; 
    false 
    end in 
    window#event#add [`KEY_PRESS]; 
    window#show(); 
    GMain.main() 
+0

非常感謝。我遇到了影響按鍵事件的其他修飾符(Num Lock,Caps等)的問題,因此只需對您的示例稍作修改即可滿足我的需求,並且效果非常好。有一件事我注意到,這段代碼並不能很好地工作,如果Caps Lock在組合鍵上,Ctrl + F不能按預期工作。 – metalnick