home *** CD-ROM | disk | FTP | other *** search
- import BP
-
- def DecToRoman(Value):
- vals = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')]
- try:
- i = long(Value)
- if i < 1 or i > 3999: return ""
- Result = ""
- for d, r in vals:
- while i >= d:
- Result += r
- i -= d
- return Result
- except:
- return ""
-
- def RomanToDec(Roman):
- try:
- Dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
- Roman = Roman[::-1].upper()
- Result = 0
- h = Dic[Roman[0]]
- for c in Roman:
- Current = Dic[c]
- if Current >= h:
- Result += Current
- h = Current
- else: Result -= Current
- if Result > 3999 or Result < 1: return ""
- return str(Result)
- except:
- return ""
-
- def DecToText(Value):
- uni = ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize']
- diz = ['vingt', 'trente', 'quarante', 'cinquante', 'soixante', '', 'quatre-vingt']
- mil = ['cent', 'mille', 'million', 'milliard', 'billion', 'milliers-de-billions', 'trillion']
- try:
- N = long(Value)
- if N < 0: return ""
- except:
- return ""
-
- if N == 0: return 'ZΘro'
- Result = ""
- k = 0
-
- while N != 0:
- U = N % 10
- N = N / 10
- D = N % 10
- N = N / 10
- if D in [1, 7, 9]:
- D -= 1
- U += 10
- s = ''
- if D > 1:
- s = ' ' + diz[D - 2]
- if (D < 8) and ((U == 1) or (U == 11)): s += ' et'
- if U > 16:
- s += ' ' + uni[9]
- U -= 10
- if U > 0: s += ' ' + uni[U - 1]
- if (Result == '') and (D == 8) and (U == 0): Result = 's'
- Result = s + Result
-
- C, N = N % 10, N / 10
- if C > 0:
- s = ''
- if C > 1: s = ' ' + uni[C - 1] + s
- s += ' ' + mil[0]
- if (Result == '') and (C > 1): Result = 's'
- Result = s + Result
-
- if N > 0:
- k += 1
- I = N % 1000
- if (I > 1) and (k > 1): Result = 's' + Result
- if I > 0: Result = ' ' + mil[k] + Result
- if (I == 1) and (k == 1): N -= 1
-
- return Result.replace('un milliers', 'un millier').replace('llionss', 'llions').strip()
-
- def CloseForm(Sender):
- f.Close()
-
- def FChange(Sender):
- if Sender.Name == "EditDec":
- EditRom.OnChange = None
- EditRom.Text = DecToRoman(EditDec.Text)
- EditRom.OnChange = FChange
- elif Sender.Name == "EditRom":
- EditDec.OnChange = None
- EditDec.Text = RomanToDec(EditRom.Text)
- EditDec.OnChange = FChange
- EditTxt.Lines.Text = DecToText(EditDec.Text)
-
- f = CreateComponent("TForm", None)
- f.SetProps(Position = "poScreenCenter", Width = 400, Height = 300, Caption = "Conversions numΘriques")
- f.Font.Name = "Tahoma"
- f.Constraints.MinWidth = 400
- f.Constraints.MinHeight = 300
-
- LabelDec = CreateComponent("TLabel", f)
- LabelDec.SetProps(Left=20, Top=20, Caption="Chiffres :", Parent=f)
- EditDec = CreateComponent("TEdit", f)
- EditDec.SetProps(Name="EditDec", Anchors=["akLeft", "akRight", "akTop"], MaxLength=21, Left=20, Top=35, Width=350, Parent=f)
- EditDec.Text = ""
-
- LabelRom = CreateComponent("TLabel", f)
- LabelRom.SetProps(Left=20, Top=70, Caption="Romains :", Parent=f)
- EditRom = CreateComponent("TEdit", f)
- EditRom.SetProps(Name="EditRom", CharCase="ecUpperCase", Anchors=["akLeft", "akRight", "akTop"], Left=20, Top=85, Width=350, Parent=f)
- EditRom.Text = ""
-
- LabelTxt = CreateComponent("TLabel", f)
- LabelTxt.SetProps(Left=20, Top=120, Caption="Lettres :", Parent=f)
- EditTxt = CreateComponent("TMemo", f)
- EditTxt.SetProps(Left=20, Top=135, Width=350, Height=110, ReadOnly=1, Anchors=["akLeft", "akRight", "akTop", "akBottom"], Parent=f)
- EditDec.OnChange = FChange
- EditRom.OnChange = FChange
-
- ButtonClose = CreateComponent("TButton", f)
- ButtonClose.SetProps(Left=150, Top=260, Width=100, Height=25, Default=1, Cancel=1, Caption="Fermer", Anchors=["akBottom"], OnClick=CloseForm, Parent=f)
-
- f.ShowModal()