如何让参与者输入出现在屏幕上并被包裹(Psychtoolbox)

时间:2017-01-17 09:25:59

标签: matlab psychtoolbox

我正在尝试在PTB的屏幕上创建一个矩形框,其中参与者可以键入包含在此框内的文本。所以我想在屏幕上绘制字符串输入,同时键入一个矩形框,文本输入被包装,以避免它继续在此框的边框之外。我一直在寻找一段时间,并没有找到任何有用的东西或之前做过这个的任何人。我想我可能会忽略一些非常简单的事情。

我尝试过使用:

% Textbox
Screen('FrameRect',window, white, [300 300 1600 600],4);    
message = [‘Your comments: ‘];
replySubj = Ask(window, message, white, black, 'GetChar',[300 225 1600 600]);

在输入时,屏幕上会很好地绘制响应输入,但是当我到达盒子的侧面,甚至是我的屏幕时,只能在一行上没有包裹。它们是一种包装文本的方法(例如,通过集成WrapString.m),使其保持在屏幕上的指定矩形内,如果文本对于一行太长,则继续使用新行吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

查看GetEchoString函数,它会在每次角色攻击时执行以下操作(据我所知,我最了解如何管理显示):

  • 如果是Ctrl-CEnterReturn:退出;
  • 如果是Backspace,则发出命令以重新绘制与背景颜色相同的前一个完整字符串(提示+用户输入)以将其删除;然后从存储的完整字符串中删除最后一个字符;
  • else将该字符附加到存储的完整字符串。

然后发出命令以指定颜色绘制生成的更新完整字符串,最后使用选项dontclearset1按照上一个命令更新屏幕(增量图,参见{ {1}}致电)。

要添加包装功能,我们可以按如下方式修改Screen('Flip', windowPtr, 0, 1)

  • 在点击GetEchoString时注释掉重绘图命令,只需更新存储的字符串(见下文);
  • 在更新的字符串上添加对Backspace的调用以包装它;
  • 使用WrapString发出命令以显示包装的字符串;
  • 最后,拨打DrawFormattedText,将Screen('Flip', windowPtr)更新为dontclearset(默认)。

现在该功能的相关部分是:

0

根据您的需要定义% adapted from PTB3 GetEchoString while true if useKbCheck char = GetKbChar(varargin{:}); else char = GetChar; end if isempty(char) string = ''; break; end switch (abs(char)) case {13, 3, 10} % ctrl-C, enter, or return break; case 8 % backspace if ~isempty(string) % Remove last character from string: string = string(1:length(string)-1); end otherwise string = [string, char]; end output = [msg, ' ', string]; output=WrapString(output,maxNumChar); DrawFormattedText(windowPtr,output,x,y,textColor,[],0,0,vLineSpacing); Screen('Flip',windowPtr); end maxNumChar

这将保持文本的水平包装,同时保持vLineSpacing功能正常工作。但请注意,如果整个屏幕都已填满,您仍然可以垂直溢出。