2017-11-10 4 views
0

GUIにテキストボックスとボタンがあります。ボタンを押すと、履歴ウィンドウが表示され、ユーザーが前の項目を選択すると、編集ボックスで強調表示されているテキストが上書きされます。Matlab GUIの編集ボックスでハイライトされたテキストにアクセスするには

コピーペーストのように動作するはずです。ヒストリウインドウで選択されているものは、選択したものにペーストするか、カーソルがどこにあっても新しいテキストを追加する必要があります。

Matlabにこれを行う方法はありますか?編集ボックスで強調表示されているものにアクセスすることは可能ですか?

答えて

1

バニラMatlabではこれはできません。 MathworksはGUI(survey 1survey 2)でサポートしているものを拡張しようとしているようですが、まだこれが許されていません。

考えられる回避策の1つはfindjobj.m, by Yair Altmanです。彼は編集ボックスについて説明していますin this post

テキストボックスにfindjobj.mをトレースして、必要な1,2行のコードを見つけ出し、3,400行すべてを持ち歩く必要はありません。

あなたが本当にする必要があるのは、選択したインデックスを取得してそこから作業することだけです。

javaHandle = findjobj(editBoxHandle); 
startSelect = get(javaHandle,'SelectionStart'); 
endSelect = get(javaHandle,'SelectionEnd'); 

選択したテキストのインデックスを取得すると、そのテキストを新しいテキストに置き換えることはほとんど自明になります。

text = editBoxHandle.String; 
editBoxHandle.String = [text(1:startSelect) newText text(endSelect:end)]; 

ユーザーがボタンをクリックすると、テキストボックスのフォーカスが失われ、選択されたテキストが消去されなくなります。テキストボックスにフォーカスを戻し、ボタンのコールバックで選択した内容を再度選択することで、これを解決できます。

uicontrol(editBoxHandle); %Give focus to the edit box, selecting the entire text 
javaHandle.select(startSelect,endSelect); %select/highlight the correct stuff 

これは、ユーザーの選択に置き換えされるテキストをハイライト表示します

関連する問題