注册 登录
编程论坛 VFP论坛

grid单元格格式问题

hytizj023 发布于 2023-04-23 22:28, 1799 次点击
只有本站会员才能查看附件,请 登录

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

SET CURSOR OFF
问题:鼠标点击单元格后,鼠标会变成输入模式,就这个 (I),我想显示鼠标原来的样子

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

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

    效果2

有没有办法实现,效果1或效果2的效果
我不想要哪个外面的蓝色的线框
最好像excel那样,点击单元格后,就是框选当前单元格,没有其他的,我只是选择单元格,不会编辑!
选择单元格,哪个框的线条最好能粗一点,框是绿色的
21 回复
#2
csyx2023-04-23 23:10
鼠标形状就简单,把 text1 的 MousePointer 属性改成非0,例如:15 代表手指
#3
hytizj0232023-04-24 08:59
以下是引用csyx在2023-4-23 23:10:34的发言:

鼠标形状就简单,把 text1 的 MousePointer 属性改成非0,例如:15 代表手指

默认就是:MousePointer 属性 0 ,我说这个没法实现嘛
#4
hytizj0232023-04-24 09:30
只有本站会员才能查看附件,请 登录

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

有没有办法让,红色的背景,把单元格填满,这样有点难看
#5
csyx2023-04-24 10:14
没有简单的办法,要实现得复杂点,自己弄个控件,等会儿有空给你做个示例
#6
吹水佬2023-04-24 10:37
封装一个含textbox的容器替换grid的text1就可以
只有本站会员才能查看附件,请 登录


#7
schtg2023-04-24 10:41
回复 6楼 吹水佬
好!
#8
csyx2023-04-24 11:12
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

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


[此贴子已经被作者于2023-4-24 12:58编辑过]

#9
hytizj0232023-04-24 12:59
以下是引用csyx在2023-4-24 11:12:55的发言:

你是在本地绑定的吧!我现在是临时表,请教我要怎么用代码绑定控件
WITH This.column4
.addobject("Container1","Container")
.currentcontrol='Container1'
*.sparse=.f.
*.Container1.标签=本地数据.期号   &&这里要怎么加标签
.Container1.visible=.t.
ENDWITH
我要怎么在容器里面加一个标签,用来显示内容!不知道怎么弄,还有内容居中显示

[此贴子已经被作者于2023-4-24 13:00编辑过]

#10
csyx2023-04-24 13:07
哪来的本地表,demo.rar 里面有 dbf 吗?同样是临时表, 表单 init 方法中生成的 cursor

用代码加没好处,想加点事件处理代码还得用 bindevent 绑定方法
直接把类库中的 boxtext 拖到要用的列里面,设定 currentcontrol 是刚加入的控件就行,不要 sparse = .f. !
然后参照 demo 表单 grid1.AfterRowColChange 代码

[此贴子已经被作者于2023-4-24 13:09编辑过]

#11
hytizj0232023-04-25 10:55
以下是引用csyx在2023-4-24 13:07:08的发言:

哪来的本地表,demo.rar 里面有 dbf 吗?同样是临时表, 表单 init 方法中生成的 cursor

用代码加没好处,想加点事件处理代码还得用 bindevent 绑定方法
直接把类库中的 boxtext 拖到要用的列里面,设定 currentcontrol 是刚加入的控件就行,不要 sparse = .f. !
然后参照 demo 表单 grid1.AfterRowColChange 代码


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

字怎么不见了,我不是设置了黑色吗

程序代码:

Local oCol as Column
For each m.oCol in This.Columns
    If m.oCol.ColumnOrder == m.nColIndex
        Exit
    EndIf
EndFor

If Upper(m.oCol.Name) == 'COLUMN2'        && 当前列是绑定 f2 字段的框框列
    *-- 自定义类 BoxText 设置的是透明背景,要显示背景色,必须改成不透明
    m.oCol.Box1.BackStyle = 1
    m.oCol.Box1.BackColor = Rgb(255,0,0)
    m.oCol.Box1.Text1.ForeColor = Rgb(0,0,0)
    m.oCol.Box1.Text1.FontBold = .t.
    *-- 显示背景色后, 原来的绿色的粗边框就不协调了, 边框厚度调整为 0
    m.oCol.Box1.BorderWidth = 0
EndIf



[此贴子已经被作者于2023-4-25 11:21编辑过]

#12
csyx2023-04-25 11:29
谁知道呢,哈哈哈,这控件就随便弄的,没考虑太多,不知哪里冲突了
把 AfterRowColChange 里面的代码都注释掉,能显示字不?

外面的蓝色的线条把 grid 的 HighLightRow 设为 .F.
#13
hytizj0232023-04-25 11:40
以下是引用csyx在2023-4-25 11:29:17的发言:

谁知道呢,哈哈哈,这控件就随便弄的,没考虑太多,不知哪里冲突了
把 AfterRowColChange 里面的代码都注释掉,能显示字不?

外面的蓝色的线条把 grid 的 HighLightRow 设为 .F.

把 AfterRowColChange 里面的代码都注释掉,也不能显示
程序代码:

Local nRowHeight, nColWidth, nMagin, nTop, nWidth

m.nRowHeight = This.Parent.Parent.RowHeight
m.nColWidth  = This.Parent.Width

m.nMagin = This.BorderWidth
With This.Text1 as TextBox
    m.nTop = (m.nRowHeight - 2*m.nMagin - .Height) / 2
    m.nTop = Max(m.nMagin, m.nTop)
    m.nWidth = Max(0, m.nColWidth - 2*m.nMagin)
    .Move(m.nMagin+1, m.nTop+1, m.nWidth-1)
EndWith

This.Move(0, 0, m.nColWidth, m.nRowHeight)

Return This.BackStyle



程序代码:

Local oCol as Column

m.oCol = This.Parent

With This.Text1 as TextBox
    .ControlSource = m.oCol.ControlSource
    .Format = m.oCol.Format
    .InputMask = m.oCol.InputMask
    .Alignment = m.oCol.Alignment
    .FontName = m.oCol.FontName
    .FontSize = m.oCol.FontSize
    .FontBold = m.oCol.FontBold
    .Height = Fontmetric(1, .FontName, .FontSize, Iif(.FontBold, 'B', 'N'))&&是不是这里
EndWith

This.BackColor = 0xffffff


你看一下哪里有冲突

[此贴子已经被作者于2023-4-25 11:45编辑过]

#14
csyx2023-04-25 11:45
不清楚你动了哪个不该动的地方,把你的表单发给我,上次说的邮箱是啥来着?
#15
hytizj0232023-04-25 11:45
以下是引用csyx在2023-4-25 11:45:15的发言:

不清楚你动了哪个不该动的地方,把你的表单发给我,上次说的邮箱是啥来着?

degidt@
#16
csyx2023-04-25 11:48
看邮件
#17
csyx2023-04-25 12:07
以下是引用hytizj023在2023-4-25 11:40:37的发言:
Local oCol as Column

m.oCol = This.Parent

With This.Text1 as TextBox
    .ControlSource = m.oCol.ControlSource
    .Format = m.oCol.Format
    .InputMask = m.oCol.InputMask
    .Alignment = m.oCol.Alignment
    .FontName = m.oCol.FontName
    .FontSize = m.oCol.FontSize
    .FontBold = m.oCol.FontBold
    .Height = Fontmetric(1, .FontName, .FontSize, Iif(.FontBold, 'B', 'N'))&&是不是这里
EndWith

This.BackColor = 0xffffff
你看一下哪里有冲突

这是 boxtext 类的代码,你没改这里吧,类里面代码不需要动的
#18
csyx2023-04-25 12:10
想到一种可能,你的列 ControlSource 没手工设置,看看试机号这一列的 ControlSource 是不是空?

AfterRowColChange 事件中先加一行,能显示字再考虑加哪合适

If Upper(m.oCol.Name) == 'COLUMN2'        && 当前列是绑定 f2 字段的框框列

    m.oCol.Box1.Text1.ControlSource = m.oCol.ControlSource    && 暂时先加这

    ....
    ....
    ....
EndIf


[此贴子已经被作者于2023-4-25 12:16编辑过]

#19
hytizj0232023-04-25 12:42
以下是引用csyx在2023-4-25 11:48:19的发言:

看邮件

看到了,现在有点其他事情
#20
hytizj0232023-04-25 13:20
以下是引用csyx在2023-4-25 12:10:34的发言:

想到一种可能,你的列 ControlSource 没手工设置,看看试机号这一列的 ControlSource 是不是空?

AfterRowColChange 事件中先加一行,能显示字再考虑加哪合适

If Upper(m.oCol.Name) == 'COLUMN2'        && 当前列是绑定 f2 字段的框框列

    m.oCol.Box1.Text1.ControlSource = m.oCol.ControlSource    && 暂时先加这

    ....
    ....
    ....
EndIf


m.oCol.Box1.Text1.ControlSource = m.oCol.ControlSource&&完美解决,我不能绑定数据源,因为临时表很多

#21
csyx2023-04-25 14:21
设置 box1 整段代码写在 AfterRowColChange 事件中显然是不合理的,我只是看你贴出的此事件原代码中对传入的 nColIndex 参数理解错误就顺手写在这了
vfp 将入口形参命名为 nColIndex 显然是误人子弟,应该叫 nColOrder。也不知你从哪抄来的,应该也是个新手,以讹传讹

这段代码只用执行一次即可,不需要每次行列变化都执行一次。最多也就 grid.RowSource 有变化时执行一次就行,没完整的源代码我也无法确定应该加在哪最合适
能凑合着用,也懒得深究了
#22
hytizj0232023-04-25 17:51
以下是引用csyx在2023-4-25 14:21:07的发言:

设置 box1 整段代码写在 AfterRowColChange 事件中显然是不合理的,我只是看你贴出的此事件原代码中对传入的 nColIndex 参数理解错误就顺手写在这了
vfp 将入口形参命名为 nColIndex 显然是误人子弟,应该叫 nColOrder。也不知你从哪抄来的,应该也是个新手,以讹传讹

这段代码只用执行一次即可,不需要每次行列变化都执行一次。最多也就 grid.RowSource 有变化时执行一次就行,没完整的源代码我也无法确定应该加在哪最合适
能凑合着用,也懒得深究了

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

现在加了m.oCol.Box1.Text1.ControlSource = m.oCol.ControlSource这句,可以正常显示,但是上下左右没有居中,企鹅号能不能通过一下,谢谢!
我不能绑定数据源,因为我有很多查询,会生成很多临时表,绑定数据源是不科学的

[此贴子已经被作者于2023-4-25 17:52编辑过]

1