rmajly 发表于 2024-1-28 13:56:53

这两贴不错,自动调节字体和控件参数

一、字体随窗口大小自动缩放

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
static={cls="static";text="Static";left=308;top=185;right=518;bottom=354;ah=1;aw=1;font=LOGFONT(h=-32);transparent=1;z=1}
)
/*}}*/

var f = winform.static.getFont()
var h=f.h
var wh = winform.height

import godking.on
godking.on(winform).onSize = function(cw,ch,sizeType){
    f.h=ch/wh*h
    winform.static.setFont(f);   
}

winform.show();
win.loopMessage();

rmajly 发表于 2024-1-28 13:58:08

二、根据DPI自动调整控件参数的方法

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;composited=1)
winform.add(
button={cls="button";text="刷新";left=235;top=318;right=515;bottom=380;db=1;dl=1;z=2};
custom={cls="custom";text="自定义控件";left=17;top=12;right=743;bottom=295;ah=1;aw=1;border=1;db=1;dl=1;dr=1;dt=1;edge=1;z=1}
)
/*}}*/

winform.show();

import godking.egrid
var e = godking.egrid(winform.custom)

// 下面这个函数是计算、调整的关键部分
var rescale = function(){
    var rowh = 30
    var colw = {90,100,80,60,120}
    var dpi =winform.dpiScaleX
    rowh *= dpi;
    for(i=1;#colw;1) colw *= dpi;
    e.RowHeight=rowh
    e.setColWidth(,colw)
}

winform.onDpiChanged = function(dpiX,dpiY,rect){
    winform.enableDpiScaling(dpiX/96,dpiY/96)
    rescale()// 系统dpi改变后自动调整
}

e.setText(0,1,{"文本型","图片型","选择型","不可编辑列表型"})
e.setText(1,{1,4},{"第1行第1列","第1行第4列"})
e.setText(2,,"全部第2行")
e.setText(3,1,"第3行第1列")

rescale(); // 软件启动,先设置一下
winform.button.oncommand = function(id,event){
    rescale(); // 随时可以手动刷新
}

win.loopMessage();

非常业余 发表于 2024-1-28 15:26:50

二、根据DPI自动调整控件参数的方法
运行了,报错

---------------------------
aardio:运行时错误
---------------------------
错误行号:#22
文件::
不支持此操作:perform arithmetic on
定义类型:variable(local)
名字:'colw'
类型:table
---------------------------------------------------
调用栈:
        :22: in function 'rescale'
        :37: in main chunk
---------------------------
确定   
---------------------------

---------------------------

民健 发表于 2024-1-28 15:34:32

:)很不错哦!!!

白白看aar 发表于 2024-1-28 15:37:33

可以 不错

rmajly 发表于 2024-1-28 18:53:39

本帖最后由 rmajly 于 2024-1-29 17:42 编辑

非常业余 发表于 2024-1-28 15:26
二、根据DPI自动调整控件参数的方法
运行了,报错


这一段修改成这样,不报错了
var rescale = function(){
    var rowh = 30
    var colw = {90,100,80,60,120}
    var dpi =winform.dpiScaleX
    rowh *= dpi;
    for(i=1;#colw;1)
    colw *= dpi;
    e.RowHeight=rowh
    e.setColWidth(,colw)
}

nanchoujx 发表于 2024-1-31 15:15:42

搞的不错

Squall8965 发表于 2024-1-31 16:47:54

谢谢分享哟。

善小而为_ 发表于 2024-2-1 17:42:29

//调试有效果
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;composited=1)
winform.add(
button={cls="button";text="刷新";left=235;top=318;right=515;bottom=380;db=1;dl=1;z=2};
custom={cls="custom";text="自定义控件";left=17;top=12;right=743;bottom=295;ah=1;aw=1;border=1;db=1;dl=1;dr=1;dt=1;edge=1;z=1}
)
/*}}*/

winform.show();

import godking.egrid
var e = godking.egrid(winform.custom)

// 下面这个函数是计算、调整的关键部分
var rescale = function(){
    var rowh = 30
    var colw = {90,100,80,60,120}
        //var dpi =winform.dpiScaleX   
    dpi = math.random(1,5)
    rowh *= dpi;
    for(i=1;#colw;1) colw *= dpi;
    e.RowHeight=rowh
    e.setColWidth(,colw)
}

winform.onDpiChanged = function(dpiX,dpiY,rect){
    winform.enableDpiScaling(dpiX/96,dpiY/96)
    rescale()// 系统dpi改变后自动调整
}

e.setText(0,1,{"文本型","图片型","选择型","不可编辑列表型"})
e.setText(1,{1,4},{"第1行第1列","第1行第4列"})
e.setText(2,,"全部第2行")
e.setText(3,1,"第3行第1列")

rescale(); // 软件启动,先设置一下
winform.button.oncommand = function(id,event){
    rescale(); // 随时可以手动刷新
}

win.loopMessage();

rmajly 发表于 2024-2-1 23:47:13

善小而为_ 发表于 2024-2-1 17:42
//调试有效果
import win.ui;
/*DSG{{*/


:handshake
页: [1]
查看完整版本: 这两贴不错,自动调节字体和控件参数