Re: [問題] GUI的滑鼠事件

看板MATLAB作者 (Jigsaw)時間10年前 (2014/02/27 14:23), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串2/2 (看更多)
引用部分原文 請問這個程式如果想要讓滑鼠定住時也持續報座標 (以目前的程式要滑鼠移動才會更新位置) 該怎麼做呢? 搜尋過好像沒有滑鼠定住時的觸發事件 CALLBACK 謝謝! ※ 引述《shaple (耍寶媽)》之銘言: : ※ 引述《dragonace ()》之銘言: : : 書上看到的一個例子: : : function mouse01(action) : 這裡表示這個函數的名字是mouse01 : 使用函數必須同時給定一個"action"(字串)輸入 : : % mouse01: 本例展示如何設定滑鼠事件的反應指令 : : if nargin==0, action='start'; end : 這行程式的意思是 : 當你程式呼叫 mouse01 且沒有給定任何輸入字串時 : [[[程式碼為 mouse01 ]]] : 函數必須輸入的action字串令他等於"start" : 因為action='start' 所以在下面的switch裡 : 函數會先執行case 'start' 裡的程式內容 : : switch(action) : : case 'start' % 開啟圖形視窗 : : axis([0 1 0 1]); % 設定圖軸範圍 : : box on; % 將圖軸加上圖框 : : title('Click and drag your mouse in this window!'); : : % 設定滑鼠按鈕被按下時的反應指令為「mouse01 down」 : : set(gcf, 'WindowButtonDownFcn', 'mouse01 down'); : ^^^^^^^^^^^^^^^^^ : 這行的意思如同%裡說明的 : : 如果在目前視窗有滑鼠按鍵被按下時執行mouse01 down這個程式 : mouse01是函數名 down是mouse01這個函數執行時必須給定的輸入字串 : 發現沒 mouse01不就是目前自己這個函數嗎 : 所以他是自己呼叫自己 : 因為要執行mouse01 輸入字串是down : 也就是說 action='down' : 所以要執行switch的case 'down' : 也就是正下方的那些內容 : : case 'down' % 滑鼠按鈕被按下時的反應指令 : : % 設定滑鼠移動時的反應指令為「mouse01 move」 : : set(gcf, 'WindowButtonMotionFcn', 'mouse01 move'); : : % 設定滑鼠按鈕被釋放時的反應指令為「mouse01 up」 : : set(gcf, 'WindowButtonUpFcn', 'mouse01 up'); : : % 列印「Mouse down!」訊息 : : fprintf('Mouse down!\n'); : : case 'move' % 滑鼠移動時的反應指令 : : currPt = get(gca, 'CurrentPoint'); : : x = currPt(1,1); : : y = currPt(1,2); : : line(x, y, 'marker', '.', 'EraseMode', 'xor'); : : % 列印「Mouse is moving!」訊息及滑鼠現在位置 : : fprintf('Mouse is moving! Current location = (%g, %g)\n', ... : : currPt(1,1), currPt(1,2)); : : case 'up' % 滑鼠按鈕被釋放時的反應指令 : : % 清除滑鼠移動時的反應指令 : : set(gcf, 'WindowButtonMotionFcn', ''); : : % 清除滑鼠按鈕被釋放時的反應指令 : : set(gcf, 'WindowButtonUpFcn', ''); : : % 列印「Mouse up!」訊息 : : fprintf('Mouse up!\n'); : : end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.190.15

02/28 10:01, , 1F
把最後的座標記住不就好了
02/28 10:01, 1F

03/04 23:12, , 2F
要的並不是座標 而是希望停多久 就報多久
03/04 23:12, 2F

03/05 12:58, , 3F
if x, y not change then trigger a while loop. done
03/05 12:58, 3F

03/07 00:24, , 4F
定住時沒有第二次座標進來更新 所以無法做此判斷
03/07 00:24, 4F

03/07 13:12, , 5F
我是說while(1) 包在外面...
03/07 13:12, 5F
文章代碼(AID): #1J3jdhOL (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1J3jdhOL (MATLAB)