1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
program Numerateur;
uses
Flash8;
{$FRAME_WIDTH 240}
{$FRAME_HEIGHT 160}
{$BACKGROUND $a0a0a0}
type
TEditBox = class(TextField)
constructor create(b: Integer; x, y, w, h: Number; s: string);
procedure onKeyDown;
end;
var
e1: TEditBox;
e2: TEditBox;
e3: TEditBox;
e4: TEditBox;
// t1, t2, t3, t4: TextField;
f: TextFormat;
// s1, s2, s3, s4: string;
// nombre: Integer;
constructor TEditBox.Create(b: Integer; x, y, w, h: Number; s: string);
begin
inherited Create(_root, 'base' + IntToStr(b), _root.getNextHighestDepth(), x, y, w, h);
setNewTextFormat(f);
type := 'input';
Text := s;
border := True;
borderColor := $808080;
background := True;
backgroundColor := $f0f0f0;
end;
function StrToInt(s: string): Integer;
var
i, tmp, p10: Integer;
begin
tmp := 0;
p10 := 1;
for i := Length(s) downto 1 do
begin
if (Ord(s[i]) >= 48) and (Ord(s[i]) <= 57) then
begin
Inc(tmp, (Ord(s[i]) - 48) * p10);
p10 := p10 * 10;
end;
end;
Result := tmp;
end;
function IntToBase(i, base: Integer): string;
var
digits, tmp: string;
begin
digits := '0123456789ABCDEF';
if i = 0 then
tmp := '0'
else
tmp:='';
while i > 0 do
begin
tmp := digits [i mod base + 1] + tmp;
i := i div base;
end;
result := tmp;
end;
function Position(const c: Char; const s: string): Integer;
var
i, tmp: Integer;
begin
tmp := 0;
for i := 1 to Length(s) do
begin
if c = s[i] then tmp := i;
end;
result := tmp;
end;
function BaseToInt(const s: string; base: Integer): Integer;
var
digits: string;
i, temp: Integer;
begin
digits := '0123456789ABCDEF';
temp := 0;
for i := 1 to Length(s) do
begin
temp := base * temp;
// Pos() sera ajouté dans la prochaine version :)
Inc(temp, Position(s[i], digits) - 1);
end;
Result := temp;
end;
procedure TEditBox.onKeyDown;
var
i: Integer;
begin
if Key.getAscii = 13 then
begin
// cf http://www.dreamincode.net/code/snippet360.htm
case Selection.getFocus of
'_level0.base10' : i := StrToInt(e1.Text);
'_level0.base2' : i := BaseToInt(e2.Text, 2);
'_level0.base8' : i := BaseToInt(e3.Text, 8);
'_level0.base16' : i := BaseToInt(e4.Text, 16);
else
exit;
end;
e1.Text := IntToStr(i);
e2.Text := IntToBase(i, 2);
e3.Text := IntToBase(i, 8);
e4.Text := IntToBase(i, 16);
end;
end;
{
procedure Cadre(xa, ya, l, h: Integer);
begin
_root.beginFill($f0f0f0);
_root.lineStyle(2,$808080);
_root.moveTo(xa , ya);
_root.lineTo(xa + l, ya);
_root.lineTo(xa + l, ya + h);
_root.lineTo(xa , ya + h);
_root.lineTo(xa , ya)
end;
}
begin
f := TextFormat.Create('Tahoma', 14);
f.color := $000000;
// Remplacer par un Border...mais je n'ai pas trouvé de borderWidth...
// Cadre(10, 10, 32, 21);
// Cadre(10, 38, 72, 21);
// Cadre(10, 66, 32, 21);
// Cadre(10, 94, 24, 21);
e1 := TEditBox.Create(10, 10, 10 + 0 * (21 + 7), (3 + 1) * 8, 21, '000');// décimal
e2 := TEditBox.Create( 2, 10, 10 + 1 * (21 + 7), (8 + 1) * 8, 21, '00000000');// binaire
e3 := TEditBox.Create( 8, 10, 10 + 2 * (21 + 7), (3 + 1) * 8, 21, '000');// octal
e4 := TEditBox.Create(16, 10, 10 + 3 * (21 + 7), (2 + 1) * 8, 21, '00');// hexadécimal
//Selection.setFocus(e1);
// un seul suffit car il reçoit TOUS les évènements clavier !
// sinon il faudrait placer chaque TextField dans un MovieClip avec un onKeyDown
Key.addListener(e1);
// Key.addListener(e2);
// Key.addListener(e3);
// Key.addListener(e4);
end. |