获取输入法状态的正确方法,支持所有输入法

没有写死啊,为啥我改样式只能进库里改,改main的样式不起作用,是我哪里没搞对吗?

等二进制出来,我在游戏里测试下看看 :rofl:

image
我这里可以也,WIN11

抱歉没看到代码听不太懂。

已经发布更新库,可以指定偏移像素了,这个参数在高分屏上会自适应缩放,不用自己计算。

Word 里面跳动的问题已经修复了,更新库就可以了。
原因是因为 Word 的光标会有规律的缩小、放大一个像素,没办法只能想办法填坑了。

啊这,难道版不同?我的是
图片

对了,刚才没仔细看你说的是什么窗口,
我正在测试的就是Win11 ,你说的这些窗口都能正常显示没问题。

你看一下,你是不是没更新,aardio 右上角有个「同步与更新」工具。

screenshots

主源码key.ime.state里有个样式,库key.ime.stateBar里有个样式,我改主源码里的不起作用,只能改库里的

不用改库,例如你想改背景颜色、字体颜色,就这样写

//显示输入状态栏
import key.ime.stateBar;
imeBar = key.ime.stateBar(winform);

//修改背景颜色,格式 0xAARRGGBB
imeBar.background = 0xE5A6CAF0; 

//修改字体颜色
imeBar.color = 0x110066;

改完了你要调用下面的代码重绘一下才能看到效果:

imeBar.redraw()

你想改什么样式。改源码是有点难度,要不你等一等发布了以后再说。

我主要想改圆角,边框,大小这些

这很简单,
aardio 范例里你看「高级图像控件」能找到很多例子。

给你写个具体的例子:

import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="输入法状态";right=432;bottom=262)
winform.add(
edit={cls="edit";left=12;top=14;right=423;bottom=236;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=2};
imeState={cls="plus";text="中";left=402;top=298;right=458;bottom=326;align="left";bgcolor=15780518;border={radius=11};clipBk=false;db=1;disabled=1;dr=1;iconStyle={align="right";font=LOGFONT(name='FontAwesome');padding={right=11}};iconText='\uF186';textPadding={left=13};transparent=1;z=1}
)
/*}}*/

//显示输入状态栏
import key.ime.stateBar;
imeBar = key.ime.stateBar(winform);

//修改背景颜色,格式 0xAARRGGBB
imeBar.background = 0xE5A6CAF0; 

//修改字体颜色
imeBar.color = 0x110066;

//修改边框样式
imeBar.border =   {color=0x805F9EA0;radius=11;width=2} 

//重绘
imeBar.predraw();

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

懂了,原来是这样,感谢~ :grinning:

毕竟只是新窗口,所以对我来说不是很实用

我修改了字体、背景颜色的代码有效。但是修改窗口宽度(left、right、textpadding)等参数按F5重启无效,请问是什么原因?
另外怎样修改字体成微软雅黑,怎样去除标点指示符号,只显示“中/英”呢?

left,right 是坐标,不是宽度。
坐标是跟着光标自动调整的,你这时候去调当然无效。

设置宽度:

imeBar.width = 36;

居中显示:

imeBar.align = "center"`

不想看到符号,把图标颜色设为全透明就可以:

imeBar.iconColor = 0;

符号可以显示全角、半角、中英标点,大小写状态,真要关掉吗?

今天又改进了一下。
允许使用 timeout 指定显示超时,默认在切换输入法状态(中英、全半角、大小写、中英标点)后显示3秒,该值设为 0 则一直显示。

切换输入法状态显示 3 秒,设为 0 一直显示
imeBar.timeout = 0;

修改背景颜色,格式 0xAARRGGBB
imeBar.background = 0xE5A6CAF0;

修改字体颜色,格式 0xAARRGGBB
imeBar.argbColor = 0xFF000000;

水平偏移像素
imeBar.offsetX = 30

垂直偏移像素
imeBar.offsetY = 0

修改边框样式
imeBar.border = {color=0x805F9EA0;radius=11;width=2};

英文 + 半角
image

英文 + 全角
image

中文 + 中文标点
image

中文 + 半角标点
image

中文 + 全角标点
image

中文 + 开启大写
image

英文 + 开启大写
image

关闭输入法 + 英文键盘
image

可以动态调整显示位置吗?像输入法一样自动调整位置。我想把它放在候选词前面

方法1:

//水平偏移像素
imeBar.offsetX = -60

//垂直偏移像素
imeBar.offsetY = 50

方法2:
自己改下代码。工具 / 探测器 / 窗口探测器 按 ctrl + f12 看候选窗口类名,
win.getPos() 取窗口位置,看源代码自行修改。WubiLex 源码有取这个窗口的代码.

如果以“|”这个光标着手,以输入法的中英文状态,改变光标的外观,会不会更加不容易和输入法候选词造成干涉?

不懂代码,纯属天马行空。 :smiling_face_with_tear: