Style pour nombre et pourcentage
coccinelle2-Aug-2013/14:21:15+2:00
Je cherche un ou des styles pour afficher et saisir des integer! , des decimal! ou des pourcentages.

Y'avait-il déjà quelque chose de fait dans le temps, je ne me rappelle plus.

Un style VID standard, pas un truc RebGUI ou autre Framework.
DideC3-Aug-2013/10:31:09+2:00
J'ai fait un style adaptable un peu pour ça il y a 10 ans (déjà !).

En gros, il permet de filtrer les caractères autorisés lors de la saisie et de convertir le résultat vers un datatype donné ou via une fonction.

Voici un extrait de la doc :
		EXAMPLES
		--------
		
			Here are some examples of layout specifications using filter-field :
			
			integer-field: filter-field filter [#"0" - #"9" #"-"] convert-to integer!
			azerty-field:  filter-field filter "azertyAZERTY"
			issue-field:   filter-field filter [#"0" - #"9" #"A" - #"Z" #"a" - #"z" #"-"] convert-to issue!
			date-field:    filter-field filter [#"0" - #"9" #"/"] convert-to date!
			hexa-field:    filter-field filter [#"0" - #"9" #"A" - #"F" #"a" - #"f"] convert-to issue!
			
			; In this example, the 'convert-to function check and correct the value in real-time :
			decimal-field: filter-field filter [#"0" - #"9" #"." #"," #"-"]
				convert-to func [face /local r][
						if error? try [
							;*** Try converting the value
							r: to-decimal face/text
						] [
							;*** If failed, remove last char
							system/view/caret: remove back system/view/caret
							;*** handle default value for empty input
							either empty? face/text [
								r: 0.0
							] [
								;*** Correct the input
								r: to-decimal head system/view/caret
								show face
							]
						]
						r	; return the resulting value
				]

			; In this example, the 'convert-to function handle advanced conversion : just the
			first letter in uppercase, rest of text in lowercase :
			capital-field: filter-field convert-to func [face][
				rejoin [uppercase copy/part face/text 1 lowercase copy at face/text 2]
			]


Mais le site ou il est stocké est inaccessible pour le moment
coccinelle4-Aug-2013/10:56:03+2:00
En attendant, je me suis fait une micro-fonction qui format les nombres en évitant les 5E-2 intempestifs. Je vais l'intégrer dans les set-face* de quelques styles, ça suffira :
form-number: func [
    value
    /local i j k result
][
    i: j: ""
    k: 0
    if all [
        parse result: form value [
            copy i to "." skip copy j to "E" skip copy k to end
            |
            copy i to "E" skip copy k to end
        ]
        16 > abs k: to-integer k
    ][
        result: copy "0000000000000000000000000000000000"
        change change at result 17 - length? i i j
        insert at result 17 + k "."
        while [(result/1 = #"0") and (result/2 <> #".")][remove/part result 1]
        while [("0" = back tail result) and (".0" <> at tail result -2)][remove back tail result]
    ]
    result
]


Pour les pourcents, j'ai fait un micro-style qui m'est suffisant :
        percent: field with [
            access: make access [
                set-face*: func [face value /local wrk][
                    if face/para [face/para/scroll: 0x0]
                    either wrk: attempt [to-decimal value][
                        value: wrk * 100
                        if value = wrk: to-integer value [value: wrk]
                        face/text: join form value "%"
                    ][
                        face/text: join form value
                    ]
                    face/line-list: none
                ]
                get-face*: func [face /local wrk][
                    either wrk: attempt [to-decimal face/text] [
                        wrk / 100
                    ][
                        face/text
                    ]
                ]
            ]
        ]
shadwolf13-Aug-2013/23:24:41+2:00
@DideC: 10 ans deja et tout n a pas change (sacre Julio Iglesias)

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2