首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使参与者输入出现在屏幕上并被包装(心理工具箱)

如何使参与者输入出现在屏幕上并被包装(心理工具箱)
EN

Stack Overflow用户
提问于 2017-01-17 09:25:58
回答 1查看 2.1K关注 0票数 0

我试图在PTB中在屏幕上创建一个矩形框,参与者可以在其中键入包装在此框中的文本。因此,我希望在输入文本的矩形框时,在屏幕上绘制字符串输入,以避免它在此框的边框外继续。我已经搜索了很长一段时间了,没有发现任何有用的东西,也没有找到任何以前做过的人。我想我可能忽略了一些很简单的东西。

我试过使用:

代码语言:javascript
运行
复制
% 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),以便它停留在屏幕上指定的矩形中,如果文本对一行太长,则继续使用新行吗?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2017-08-04 10:34:53

查看GetEchoString函数,它对每个字符执行以下操作(据我所知,显示是如何管理的):

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

然后发出命令,以指定的颜色绘制得到的更新后的完整字符串,最后按照前面的命令更新屏幕,并选择dontclearset1 (增量绘图,cf )。Screen('Flip', windowPtr, 0, 1)电话)。

为了添加包装功能,我们可以修改GetEchoString,如下所示:

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

因此,该职能的有关部分现在是:

代码语言:javascript
运行
复制
% 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

根据您的需要定义maxNumCharvLineSpacing的位置。

这将处理文本的水平包装,同时保持Backspace函数正常工作。但是请注意,如果填充了整个屏幕,您仍然可以垂直溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41693336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档