标题:表单或类库新增一个颜色属性,比方说,HighlightColor,在IDE中,如何更方便 ...
只看楼主
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
结帖率:100%
 问题点数:0 回复次数:12 
表单或类库新增一个颜色属性,比方说,HighlightColor,在IDE中,如何更方便地修改属性值?
比方说,表单有个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编辑过]

搜索更多相关主题的帖子: 属性 表单 颜色 修改 IDE 
2022-08-25 08:19
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
rgb(a,b,c)是一个整体,如果想简化成只保留a,b,c,那需要你在使用前做转化
2022-08-25 09:23
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用laowan001在2022-8-25 09:23:52的发言:
rgb(a,b,c)是一个整体,如果想简化成只保留a,b,c,那需要你在使用前做转化


正是希望不被“歧视”。VFP系统内部的Backcolor属性,可在IDE中将颜色值简洁表示为a,b,c而且可直接点【...】拾取颜色,然而用户自定义的color相关属性,却搞得相当麻烦,也并非所见即所得,故而才发此问。
2022-08-25 10:05
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 

*
mcolor = GETCOLOR()
this.BackColor = mcolor

mcolor可以保存下来,以后调用时赋给相关color
这样其实还算方便
2022-08-25 10:18
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
既然是自定义属性,vfp自然不知道这个属性的数据类型,更不可能知道你的HighlightColor是个颜色值并需要将逗号分隔的三个值用rgb()来转换,即使vfp的AI有这水平,也未必被待见
但如果说vfp9允许你在这个属性后面显示省略号按钮,并调用你自己的脚本,应该比AI更容易让人接受吧
仔细阅读vfp帮助文件,或许会有发现:Reference -> MemberData Extensibility -> Custom Property Editors
2022-08-25 10:33
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
以下是引用csyx在2022-8-25 10:33:14的发言:
Reference -> MemberData Extensibility -> Custom Property Editors


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

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

2022-08-25 11:45
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
楼主这样的用途,简单的写几行脚本就可以简化以后的操作
2022-08-25 12:17
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 



然后 ctrl+v 粘贴即可

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

2022-08-25 12:18
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
放剪贴板里始终有侵犯公共资源的嫌疑,还是直接写入属性值吧
脚本改成如下:
程序代码:
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>>)')
2022-08-25 13:10
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:0 
非常感谢csyx大侠手把手的一步一步的精彩演示!

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

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509865-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062126 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved