吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 156|回复: 9
收起左侧

[其他求助] 求助ps jsx脚本 弹窗处理文本

[复制链接]
Stive1233 发表于 2025-12-28 22:16
50吾爱币
以下为ps的jsx脚本代码文件,求助如何让这个面板能够宽度不要这么宽,然后希望初始详情panel 是影藏的,不要占位,点击详情后扩展主窗口显示一个可以滚动的禁止复制的只读文本框来显示value[1],保持dialog窗体的固定大小比如初始200,300,显示详情后200,600,再点击影藏后恢复200,300

不知道能否做到,求助ai给我一堆,没一个有用的,求助大佬了



function ShowMessageBox(value, filePath) {
        // if (typeof type === 'undefined') {type = "Stive";}
        value = value.split('?');
        var dialog = new Window('dialog', "Stive");
        dialog.alignChildren = 'fill';
        dialog.spacing = 5;
        dialog.add('statictext', undefined, value[0])

        var panel = dialog.add('panel');
        panel.borderless = true;
        panel.orientation = 'column';
        panel.alignChildren = 'left';
        panel.spacing = 5;
        panel.visible = false;

        var textDisplay = panel.add('edittext', undefined, value[1], {
        multiline: true,
        scrollable: true,
        readonly: true,
        borderless: true
        });

        var buttonGroup = dialog.add("group"); // 创建一个组来容纳按钮
        var AButton = buttonGroup.add("button", undefined, "详情");
        var Button = buttonGroup.add("button", undefined, "确定");
        dialog.defaultElement = Button;
        
        AButton.onClick = function() {panel.visible = !panel.visible;}
        Button.onClick = function() {dialog.close();}
        dialog.show();
}

var text = "共10个 均时 00:00:08?101 6000\n102 6000\n103 6002\n104 6003\n105 6004\n106 6005\n107 6006\n108 6007\n109 6008\n110 6009\n111 6010\n112 6011\n113 6012\n114 601\n115 6014\n116 6015\n117 6016\n118 6017\n119 6018\n120 6019\n121 6020\n122 6021\n123 6022\n124 6023\n125 6024\n126 6025\n127 6026\n128 6027\n129 6028\n130 6029\n131 6030\n132 6031\n"

ShowMessageBox(text)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

liaoran 发表于 2025-12-29 04:11
[JavaScript] 纯文本查看 复制代码
function ShowMessageBox(value) {
    // 分割字符串,处理无?分隔符的情况,避免索引未定义
    var valueArr = value ? value.split('?') : ['', ''];
    var titleText = valueArr[0] || '无提示信息';
    var detailText = valueArr[1] || '无详细内容';
    
    // 定义对话框固定尺寸常量(宽, 高),满足你的需求
    var DIALOG_SIZE_INIT = [200, 300];  // 初始尺寸
    var DIALOG_SIZE_DETAIL = [200, 600]; // 显示详情后的尺寸
    var CONTENT_WIDTH = 180; // 面板/文本框宽度(小于对话框宽度,预留边距,避免过宽)
    
    // 创建对话框,设置初始固定尺寸
    var dialog = new Window('dialog', "Stive");
    dialog.preferredSize.width = DIALOG_SIZE_INIT[0];
    dialog.preferredSize.height = DIALOG_SIZE_INIT[1];
    dialog.alignChildren = 'fill';
    dialog.spacing = 10;
    
    // 添加提示文本,适配对话框宽度,避免挤压
    var tipText = dialog.add('statictext', undefined, titleText);
    tipText.preferredSize.width = CONTENT_WIDTH;
    tipText.preferredSize.height = 30;
    
    // 声明详情面板变量(初始不创建,避免占位)
    var panel = null;
    var textDisplay = null;
    
    // 创建按钮组,优化布局,避免按钮重叠
    var buttonGroup = dialog.add("group");
    buttonGroup.alignChildren = 'right';
    buttonGroup.spacing = 15;
    buttonGroup.preferredSize.height = 40;
    buttonGroup.preferredSize.width = CONTENT_WIDTH;
    
    // 添加按钮,设置固定尺寸
    var AButton = buttonGroup.add("button", [0, 0, 80, 30], "详情");
    var confirmButton = buttonGroup.add("button", [0, 0, 80, 30], "确定");
    dialog.defaultElement = confirmButton;
    
    // 详情按钮点击事件:动态添加/移除面板,切换对话框尺寸
    AButton.onClick = function() {
        if (!panel) {
            // 第一步:创建详情面板(首次点击显示时创建,避免初始占位)
            panel = dialog.add('panel');
            panel.borderless = true;
            panel.orientation = 'column';
            panel.alignChildren = 'left';
            panel.spacing = 5;
            panel.preferredSize.width = CONTENT_WIDTH;
            panel.preferredSize.height = DIALOG_SIZE_DETAIL[1] - 100; // 适配详情对话框高度,预留按钮/提示区域
            
            // 第二步:创建禁止复制、可滚动、只读的文本框
            textDisplay = panel.add('edittext', [0, 0, CONTENT_WIDTH, panel.preferredSize.height - 10], detailText, {
                multiline: true,
                scrollable: true,
                readonly: true,
                borderless: true
            });
            
            // 核心:拦截onCopy事件,返回false禁止复制文本
            textDisplay.onCopy = function() {
                return false;
            };
            
            // 第三步:切换对话框到详情固定尺寸
            dialog.preferredSize.width = DIALOG_SIZE_DETAIL[0];
            dialog.preferredSize.height = DIALOG_SIZE_DETAIL[1];
            
            // 按钮文本切换(可选,提升用户体验)
            AButton.text = "隐藏详情";
        } else {
            // 第一步:删除面板,彻底移除占位
            dialog.remove(panel);
            panel = null;
            textDisplay = null;
            
            // 第二步:恢复对话框初始固定尺寸
            dialog.preferredSize.width = DIALOG_SIZE_INIT[0];
            dialog.preferredSize.height = DIALOG_SIZE_INIT[1];
            
            // 按钮文本切换(可选,提升用户体验)
            AButton.text = "详情";
        }
    };
    
    // 确定按钮点击事件:关闭对话框
    confirmButton.onClick = function() {
        dialog.close();
    };
    
    // 显示对话框
    dialog.show();
}

var text = "共10个 均时 00:00:08?101 6000\n102 6000\n103 6002\n104 6003\n105 6004\n106 6005\n107 6006\n108 6007\n109 6008\n110 6009\n111 6010\n112 6011\n113 6012\n114 601\n115 6014\n116 6015\n117 6016\n118 6017\n119 6018\n120 6019\n121 6020\n122 6021\n123 6022\n124 6023\n125 6024\n126 6025\n127 6026\n128 6027\n129 6028\n130 6029\n131 6030\n132 6031\n";

// 调用函数
ShowMessageBox(text);
 楼主| Stive1233 发表于 2025-12-29 09:18
liaoran 发表于 2025-12-29 04:11
[mw_shl_code=javascript,true]function ShowMessageBox(value) {
    // 分割字符串,处理无?分隔符的情 ...



不行呀,显示详情显示不出来
 楼主| Stive1233 发表于 2025-12-29 13:56
我找到了,但是这个滚动框不太美观,滚动条太粗大了,而且文本框点击会被选中,有没有大佬能帮我优化下,希望文本框的内容不能

选中,滚动条纤细一点,可以优化的话我直接采纳你的



[C] 纯文本查看 复制代码
function ShowMessageBox(value, filePath) {
    value = value.split('?');
    
    var dialog = new Window('dialog', "Stive");
    dialog.preferredSize = [140, 10];
    dialog.alignChildren = 'fill';
    dialog.alignChildren = 'center'; // 水平居中
    dialog.spacing = 5;
    
    var titleGroup = dialog.add('panel');
    titleGroup.alignChildren = 'center'; // 水平居中
    titleGroup.alignment = 'center'; // 垂直居中(如果有高度时)
    var titleText = titleGroup.add('statictext', undefined, value[0]);
    titleText.alignment = 'center'; // 文本自身居中
    
    var buttonGroup = dialog.add("group");
    var detailButton = buttonGroup.add("button", undefined, "详情");
    var confirmButton = buttonGroup.add("button", undefined, "确定");
    dialog.defaultElement = confirmButton;
    
    var detailPanelContainer = dialog.add('group');
    detailPanelContainer.alignChildren = 'fill';

    // 详情按钮点击事件
    detailButton.onClick = function() {
        if (detailPanelContainer.children.length > 0) {
            detailPanelContainer.remove(detailPanelContainer.children[0]);
            detailPanelContainer.preferredSize = [140, 0];
            dialog.preferredSize = [140, 10];
            dialog.layout.layout(true);
        } else {
            var textDisplay = detailPanelContainer.add('EditText', undefined, value[1], {
                multiline: true,
                scrollable: true,
                readonly: true,
                borderless: true,
                active: false,
                properties: {
                    wantReturn: false,
                    noecho: false
                }
            });

            textDisplay.preferredSize = [140, 80];
            dialog.layout.layout(true); // 强制重新布局
        }
    };
    
    confirmButton.onClick = function() {
        dialog.close();
    };
    
    dialog.show();
}

var text = "共10个 均时 00:00:08?101 6000\n102 6000\n103 6002\n104 6003\n105 6004\n106 6005\n107 6006\n108 6007\n109 6008\n110 6009\n111 6010\n112 6011\n113 6012\n114 601\n115 6014\n116 6015\n117 6016\n118 6017\n119 6018\n120 6019\n121 6020\n122 6021\n123 6022\n124 6023\n125 6024\n126 6025\n127 6026\n128 6027\n129 6028\n130 6029\n131 6030\n132 6031\n";

ShowMessageBox(text);
liaoran 发表于 2025-12-29 23:21
Stive1233 发表于 2025-12-29 13:56
我找到了,但是这个滚动框不太美观,滚动条太粗大了,而且文本框点击会被选中,有没有大佬能帮我优化下,希 ...

[JavaScript] 纯文本查看 复制代码
function ShowMessageBox(value, filePath) {
    value = value.split('?');
     
    var dialog = new Window('dialog', "Stive");
    dialog.preferredSize = [140, 10];
    dialog.alignChildren = 'fill';
    dialog.alignChildren = 'center'; // 水平居中
    dialog.spacing = 5;
     
    var titleGroup = dialog.add('panel');
    titleGroup.alignChildren = 'center'; // 水平居中
    titleGroup.alignment = 'center'; // 垂直居中(如果有高度时)
    var titleText = titleGroup.add('statictext', undefined, value[0]);
    titleText.alignment = 'center'; // 文本自身居中
     
    var buttonGroup = dialog.add("group");
    var detailButton = buttonGroup.add("button", undefined, "详情");
    var confirmButton = buttonGroup.add("button", undefined, "确定");
    dialog.defaultElement = confirmButton;
     
    var detailPanelContainer = dialog.add('group');
    detailPanelContainer.alignChildren = 'fill';
 
    // 详情按钮点击事件
    detailButton.onClick = function() {
        if (detailPanelContainer.children.length > 0) {
            detailPanelContainer.remove(detailPanelContainer.children[0]);
            detailPanelContainer.preferredSize = [140, 0];
            dialog.preferredSize = [140, 10];
            dialog.layout.layout(true);
        } else {
            // 优化1:替换为 StaticText(带滚动),替代原有 EditText 解决选中和滚动条问题
            var textDisplay = detailPanelContainer.add('statictext', [0, 0, 140, 80], value[1]);
            // 关键配置:启用静态文本滚动,实现纤细滚动条
            textDisplay.scrollable = true;
            textDisplay.multiline = true;
            // 优化2:禁用文本选中相关行为,确保内容无法被选中
            textDisplay.active = false;
            textDisplay.focusable = false; // 禁止获取焦点,从根源阻止选中
            textDisplay.onMouseDown = function() {
                return false; // 阻止鼠标按下触发的选中行为
            };
            textDisplay.onSelect = function() {
                return false; // 显式禁止文本选择事件
            };
 
            // 保持原有布局尺寸
            textDisplay.preferredSize = [140, 80];
            dialog.layout.layout(true); // 强制重新布局
        }
    };
     
    confirmButton.onClick = function() {
        dialog.close();
    };
     
    dialog.show();
}
 
var text = "共10个 均时 00:00:08?101 6000\n102 6000\n103 6002\n104 6003\n105 6004\n106 6005\n107 6006\n108 6007\n109 6008\n110 6009\n111 6010\n112 6011\n113 6012\n114 601\n115 6014\n116 6015\n117 6016\n118 6017\n119 6018\n120 6019\n121 6020\n122 6021\n123 6022\n124 6023\n125 6024\n126 6025\n127 6026\n128 6027\n129 6028\n130 6029\n131 6030\n132 6031\n";
 
ShowMessageBox(text);
 楼主| Stive1233 发表于 2025-12-30 09:14
liaoran 发表于 2025-12-29 23:21
[mw_shl_code=javascript,true]function ShowMessageBox(value, filePath) {
    value = value.split(' ...

这个是在ps里面使用的,静态文本StaticText不能滚动哦,我之前就试过了
liaoran 发表于 2025-12-30 16:07
Stive1233 发表于 2025-12-30 09:14
这个是在ps里面使用的,静态文本StaticText不能滚动哦,我之前就试过了

[JavaScript] 纯文本查看 复制代码
function ShowMessageBox(value) {
    value = value.split('?');

    var dialog = new Window('dialog', "Stive");
    dialog.orientation = 'column';
    dialog.alignChildren = 'fill';
    dialog.spacing = 6;

    // 标题
    var title = dialog.add('statictext', undefined, value[0]);
    title.alignment = 'center';

    // 按钮
    var btnGroup = dialog.add('group');
    btnGroup.alignment = 'center';
    var detailBtn = btnGroup.add('button', undefined, '详情');
    var okBtn = btnGroup.add('button', undefined, '确定');

    // 详情容器
    var detailGroup = dialog.add('group');
    detailGroup.orientation = 'column';
    detailGroup.alignChildren = 'fill';
    detailGroup.visible = false;

    // 内容(先不设高度)
    var text = detailGroup.add(
        'statictext',
        undefined,
        value[1],
        { multiline: true }
    );
    text.preferredSize.width = 220;

    // 详情按钮
    detailBtn.onClick = function () {
        detailGroup.visible = !detailGroup.visible;

        // ⭐ 关键:让 ScriptUI 先算尺寸
        dialog.layout.layout(true);

        // ⭐ 读取真实高度
        var realHeight = text.size.height;

        // ⭐ 同步给父容器
        detailGroup.preferredSize = [220, realHeight];

        // ⭐ 允许 dialog 扩展
        dialog.minimumSize = [
            dialog.size.width,
            dialog.size.height
        ];

        dialog.layout.resize();
    };

    okBtn.onClick = function () {
        dialog.close();
    };

    dialog.show();
}

var text = "共10个 均时 00:00:08?101 6000\n102 6000\n103 6002\n104 6003\n105 6004\n106 6005\n107 6006\n108 6007\n109 6008\n110 6009\n111 6010\n112 6011\n113 6012\n114 601\n115 6014\n116 6015\n117 6016\n118 6017\n119 6018\n120 6019\n121 6020\n122 6021\n123 6022\n124 6023\n125 6024\n126 6025\n127 6026\n128 6027\n129 6028\n130 6029\n131 6030\n132 6031\n";
 
ShowMessageBox(text);
 楼主| Stive1233 发表于 2025-12-31 17:36
liaoran 发表于 2025-12-30 16:07
[mw_shl_code=javascript,true]function ShowMessageBox(value) {
    value = value.split('?');

不行呀,保存为jsx文件,扔到ps窗口就可以运行看到效果的
liaoran 发表于 2025-12-31 22:06
Stive1233 发表于 2025-12-31 17:36
不行呀,保存为jsx文件,扔到ps窗口就可以运行看到效果的


这不是可以吗
 楼主| Stive1233 发表于 2026-1-1 10:00

我现在是这样的,第一是能折叠,其次是能滚动,statictext不能滚动,所以一开始就放弃了,您最新发这个又回到我最开始的版本去了主要是,现在就是希望优化下这个滚动条

这个滚动框不太美观,滚动条太粗大了,而且文本框点击会被选中,希望文本框的内容不能选中,滚动条纤细一点


您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-1-3 00:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表