注册 登录
编程论坛 VFP论坛

表单或类库新增一个颜色属性,比方说,HighlightColor,在IDE中,如何更方便地修改属性值?

cssnet 发布于 2022-08-25 08:19, 1682 次点击
比方说,表单有个BackColor属性,在“属性”窗口显示:
240,240,240
这个颜色值其实=rgb(240,240,240)
更准确地说,BackColor属性其实是一个数值型变量N,精确长度是3字节,值为15790320,或更简洁一些表示:
0xF0F0F0
要修改颜色值,可以点按钮【...】,打开“Windows颜色”对话框,直接选颜色。

现在我的自定义属性HighlightColor,如何做到像VFP的内部属性那样,只需显示:
255,0,255
要修改颜色值,可以点按钮【...】,打开“Windows颜色”对话框,直接选颜色。

而不必在属性窗口输入:
=rgb(255,0,255)
或者
16711935


[此贴子已经被作者于2022-8-25 08:24编辑过]

12 回复
#2
laowan0012022-08-25 09:23
rgb(a,b,c)是一个整体,如果想简化成只保留a,b,c,那需要你在使用前做转化
#3
cssnet2022-08-25 10:05
以下是引用laowan001在2022-8-25 09:23:52的发言:
rgb(a,b,c)是一个整体,如果想简化成只保留a,b,c,那需要你在使用前做转化


正是希望不被“歧视”。VFP系统内部的Backcolor属性,可在IDE中将颜色值简洁表示为a,b,c而且可直接点【...】拾取颜色,然而用户自定义的color相关属性,却搞得相当麻烦,也并非所见即所得,故而才发此问。
#4
laowan0012022-08-25 10:18

*
mcolor = GETCOLOR()
this.BackColor = mcolor

mcolor可以保存下来,以后调用时赋给相关color
这样其实还算方便
#5
csyx2022-08-25 10:33
既然是自定义属性,vfp自然不知道这个属性的数据类型,更不可能知道你的HighlightColor是个颜色值并需要将逗号分隔的三个值用rgb()来转换,即使vfp的AI有这水平,也未必被待见
但如果说vfp9允许你在这个属性后面显示省略号按钮,并调用你自己的脚本,应该比AI更容易让人接受吧
仔细阅读vfp帮助文件,或许会有发现:Reference -> MemberData Extensibility -> Custom Property Editors
#6
cssnet2022-08-25 11:45
以下是引用csyx在2022-8-25 10:33:14的发言:
Reference -> MemberData Extensibility -> Custom Property Editors


哈哈,感谢csyx提示,找到了:
https://docs.(v=vs.90)

忒复杂了一些,不具“性价比”
还是老老实实打开PS软件,查好颜色值,然后:
= RGB(255,0,255)

#7
csyx2022-08-25 12:17
楼主这样的用途,简单的写几行脚本就可以简化以后的操作
#8
csyx2022-08-25 12:18
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

然后 ctrl+v 粘贴即可

[此贴子已经被作者于2022-8-25 12:19编辑过]

#9
csyx2022-08-25 13:10
放剪贴板里始终有侵犯公共资源的嫌疑,还是直接写入属性值吧
脚本改成如下:
程序代码:
Local nn, nr, ng, nb, cc, oo
Local array aTemp[1]

If ASelObj(aTemp) < 1
    Return
EndIf
oo = aTemp[1]
If !PemStatus(oo, 'HighLightColor', 5)
    Return
EndIf
nn = GetColor()
If nn == -1
    Return
EndIf

cc = Right(Transform(nn, '@0'), 6)
nb = Evaluate('0x' + Substr(cc,1,2))
ng = Evaluate('0x' + Substr(cc,3,2))
nr = Evaluate('0x' + Substr(cc,5,2))
oo.HighLightColor = Textmerge('=rgb(<<nr>>,<<ng>>,<<nb>>)')
#10
cssnet2022-08-25 14:28
非常感谢csyx大侠手把手的一步一步的精彩演示!

RGB(R,G,B)颜色值,本质上,其实就是3个字节长的整型数,故而,最简洁直观的颜色值表示,其实是这样子的:
0xBBGGRR
就比方说,颜色值的赋值方式,可以如下三选一:
this.HighlightColor = RGB(255,0,125)
this.HighlightColor = 0x7D00FF
this.HighlightColor = 8192255

用十六进制整型数表示颜色值,只需留意一点:低位在前,高位在后,RR与BB互调一下位置。
然而可惜的是,“属性”窗口默认无法识别“0x”打头的十六进制整型数,0x7D00FF被当成了字符串。
否则也就没这么多麻烦了。呵呵。
#11
吹水佬2022-08-25 16:03
以下是引用cssnet在2022-8-25 14:28:05的发言:
然而可惜的是,“属性”窗口默认无法识别“0x”打头的十六进制整型数,0x7D00FF被当成了字符串。

加个=号在前面不可以吗
#12
cssnet2022-08-25 16:28
以下是引用吹水佬在2022-8-25 16:03:48的发言:
加个=号在前面不可以吗


哈哈,确实可以啊!谢谢吹版!
我先前想复杂啦,还以为要输入:
= Evaluate('0x7D00FF')
心道,那样的话,还真不如:
= RGB(255,0,125)

#13
sam_jiang2022-08-25 17:45
为你的自定义属性分配一个asign方法(隐藏),以便对用户输入的参数进行判读,就可以完成类似vfp的内置功能。
1