标题:最右边开始写数据?
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
如果每次都刷掉原有的数据,重新输入新的,还好办,要保留原先的数据,过于复杂,还是划不来。

授人以渔,不授人以鱼。
2012-12-22 15:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
这样输入也难判断什么时候是小数点,但一开始就处于小数点后面的位置。我始终不明白要这样输入干什么,操作者阅读本身都是从左至右,敲数字要从右往左顶,自己搞自己。

授人以渔,不授人以鱼。
2012-12-22 15:27
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
回复 32楼 TonyDeng
也感觉这样没必要
2012-12-22 15:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
像我前面那个图那样,在下面的文本框正常输入数字,上面的就按要求显示,不用太麻烦了吧。如果要按那个要求,等于重新写一个TextBox控件,这代价太大了,除非用户给钱,哈哈。

[ 本帖最后由 TonyDeng 于 2012-12-22 15:34 编辑 ]

授人以渔,不授人以鱼。
2012-12-22 15:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:3 
程序代码:
SET DEFAULT TO "Z:\Test\VFP"
SET PATH TO "Z:\my_Tools"
SET PROCEDURE TO myForm, myCurrencyTextBox
CLEAR ALL
Main()
CLEAR ALL
RETURN 

PROCEDURE Main()
    LOCAL loForm
    loForm = NEWOBJECT("_Form")
    loForm.Show
    READ EVENTS
ENDPROC 

DEFINE CLASS _Form AS myForm
    Caption = "Test"
   
    ADD OBJECT TextBox1 AS myCurrencyTextBox WITH InputMask = "999999.99", Value = 100.00
   
    PROCEDURE Arrange
        WITH This.TextBox1
            .Top = 5
            .Left = 5
        ENDWITH
    ENDPROC
   
ENDDEFINE


myCurrentTextBox.prg
程序代码:
#DEFINE LABEL_WIDTH     16
#DEFINE LABEL_HEIGHT    16
DEFINE CLASS myCurrencyTextBox AS Container
    BorderWidth = 0
    Height = 20
   
    InputMask = "9.99"
    Value = 0
   
    ADD OBJECT PROTECTED TextBox1 AS TextBox WITH Height = 25, SelectOnEntry = .T., Visible = .F.
   
    PROCEDURE TextBox1.Init
        This.AddProperty("Confirm_Value", SET("Confirm"))
        SET CONFIRM ON
    ENDPROC
   
    PROCEDURE TextBox1.Destroy
        LOCAL lcConfirm
        lcConfirm = This.Confirm_Value
        SET CONFIRM &lcConfirm
    ENDPROC
   
    PROCEDURE TextBox1.Refresh
        This.Value = This.Parent.Value
    ENDPROC
   
    PROCEDURE TextBox1.Valid
        WITH This.Parent
            .Value = This.Value
            .Refresh
        ENDWITH
        This.Visible = .F.
    ENDPROC
   
    PROCEDURE TextBox1.Visible_Assign(tAssign)
        WITH This
            .Visible = tAssign
            .Parent.Height = IIF(!.Visible, LABEL_HEIGHT, LABEL_HEIGHT + .Height)
            IF .Visible
                .Refresh
                .SetFocus
            ENDIF
        ENDWITH
    ENDPROC
   
    PROCEDURE Init
        LOCAL lnIndex
       
        WITH This
            IF !EMPTY(.InputMask)
                .AddProperty("Labels[" + TRANSFORM(LEN(.InputMask)) + "]")
                FOR lnIndex = 1 TO ALEN(.Labels, 1)
                    .AddObject(".Labels[" + TRANSFORM(lnIndex) + "]", "Label")
                    WITH .Labels[lnIndex]
                        .BorderStyle = 1
                        .Width = LABEL_WIDTH
                        .Height = LABEL_HEIGHT
                        .Alignment = 2
                        .Visible = .T.
                    ENDWITH
                    BINDEVENT(.Labels[lnIndex], "Click", This, "Click")
                NEXT
            ENDIF
            .Arrange
            .Refresh
        ENDWITH
       
    ENDPROC
   
    PROCEDURE Value_Assign(tAssign)
        This.Value = tAssign
        This.TextBox1.Value = This.Value
    ENDPROC
   
    PROCEDURE Click
        This.TextBox1.Visible = !This.TextBox1.Visible
    ENDPROC
   
    PROCEDURE Refresh
        LOCAL lcString, lnIndex
       
        This.SetAll("Caption", " ", "Label")
        lcString = TRANSFORM(This.Value, This.InputMask)
        FOR lnIndex = 1 TO LENC(lcString)
            This.Labels[lnIndex].Caption = SUBSTRC(lcString, lnIndex, 1)
        NEXT
       
    ENDPROC
   
    PROCEDURE Arrange
        LOCAL lnIndex
       
        This.Width = 0
        FOR lnIndex = 1 TO ALEN(This.Labels, 1)
            WITH This.Labels[lnIndex]
                .Top = 0
                .Left = (lnIndex - 1) * .Width
            ENDWITH
            This.Width = This.Width + This.Labels[lnIndex].Width
        NEXT
        WITH This.TextBox1
            .Top = LABEL_HEIGHT
            .Left = 0
            .Width = This.Width
        ENDWITH
        This.Height = IIF(!This.TextBox1.Visible, LABEL_HEIGHT, LABEL_HEIGHT + This.TextBox1.Height)
       
    ENDPROC
   
ENDDEFINE
#UNDEFINE LABEL_WIDTH
#UNDEFINE LABEL_HEIGHT

授人以渔,不授人以鱼。
2012-12-22 15:43
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
太好,太多!往左走数字是一种方式,是公益的大众化方式,可能很难实现。各位大师辛苦了!
2012-12-22 15:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
既然是大众化需求,几十年来早应该有现成的功能模块可用了,不用现在来求。

授人以渔,不授人以鱼。
2012-12-22 16:21
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
回复 37楼 TonyDeng
是 没有见过这样的模块
2012-12-22 16:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
当然没有。财务电算化几十年前就流行了,一向都是按常规的那种输入方式来输入数据,如果不能接受,早就要改了,既然到现在都没有改,就说明绝大多数财务人员都接受了。虽然,用户永远是正确的,但这种个别老顽固如果非要做到那样不可,就只能量身定做,支付贴身服务费。给钱就能做,不是说做不出来,要看是否划算,总不能无代价或低代价地做了,又不是能够大规模推广的。

授人以渔,不授人以鱼。
2012-12-22 16:51
asdf_123000
Rank: 4
等 级:业余侠客
威 望:1
帖 子:262
专家分:203
注 册:2012-12-20
得分:0 
说的在理,非常态性的东西不要去做了,还是从左到右录入吧!
2012-12-22 17:07



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




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

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