Hola,
Aprovechando el estupendo
componente ATexto, escrito por
Antoni Aloy, solamente nos quedaría convertir un número romano al correspondiente entero. He buscado en
Koders.com y he encontrado
una clase escrita en Java que trata sobre números romanos.
En dicha clase hay un método, entre otros, cuyo nombre lo dice todo: "RomanToInt". He traducido dicho método a Delphi como una función y parece ir bien. La referida clase es muy curiosa y no estaría mal traducirla entera, pero, en todo caso, cierto método, además del mencionado, merecería atención: estoy hablando del método "validate".
El caso es que gracias a esas dos piezas: el componente
ATexto y la siguiente función, por lo menos, podrías conseguir lo que te propones, me parece a mí, vamos.
Código Delphi
[-]
function RomanToInt(const roman: string) : integer;
var
i: integer;
lastChar: Char;
begin
result := 0;
lastChar := ' ';
for i := Length(roman) downto 1 do
begin
case roman[i] of
'I': if (lastChar = 'X') or (lastChar = 'V') then
Dec(result) else Inc(result);
'V': Inc(result, 5);
'X': if (lastChar = 'C') or (lastChar = 'L') then
Dec(result, 10) else Inc(result, 10);
'L': Inc(result, 50);
'C': if (lastChar = 'M') or (lastChar = 'D') then
Dec(result, 100) else Inc(result, 100);
'D': Inc(result, 500);
'M': Inc(result, 1000);
end;
lastChar := roman[i];
end;
end;