Guest User

Untitled

a guest
Jan 22nd, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.30 KB | None | 0 0
  1. unit Unit1;
  2. interface
  3. uses Windows, Messages, Forms,Dialogs, StdCtrls, ExtCtrls, ShellAPI, Buttons, XPMan;
  4. type
  5. TForm1 = class(TForm)
  6. Edit1: TEdit;
  7. Edit2: TEdit;
  8. Button1: TButton;
  9. Edit3: TEdit;
  10. Button2: TButton;
  11. Label1: TLabel;
  12. Label2: TLabel;
  13. Label3: TLabel;
  14. Image1: TImage;
  15. Edit5: TEdit;
  16. Button4: TButton;
  17. Label6: TLabel;
  18. BitBtn1: TBitBtn;
  19. Label5: TLabel;
  20. Edit4: TEdit;
  21. Button5: TButton;
  22. Button6: TButton;
  23. XPManifest1: TXPManifest;
  24. Button3: TButton;
  25. Button7: TButton;
  26. procedure Edit1Change(Sender: TObject);
  27. procedure Edit2Change(Sender: TObject);
  28. procedure Edit3Change(Sender: TObject);
  29. procedure Edit4Change(Sender: TObject);
  30. procedure Edit5Change(Sender: TObject);
  31. procedure Button6Click(Sender: TObject);
  32. procedure Button1Click(Sender: TObject);
  33. procedure Button2Click(Sender: TObject);
  34. procedure Button4Click(Sender: TObject);
  35. procedure BitBtn1Click(Sender: TObject);
  36. procedure Button3Click(Sender: TObject);
  37. private
  38. { Private declarations }
  39. public
  40. { Public declarations }
  41. end;
  42. var
  43. Form1: TForm1;
  44. implementation
  45. uses Unit2;
  46. {$R *.dfm}
  47. function IntToBin(Value: integer; Digits: integer): string;
  48. var
  49. i: integer;
  50. begin
  51. result := '';
  52. for i := 0 to Digits - 1 do begin if Value and (1 shl i) > 0
  53. then result := '1' + result else result := '0' + result;
  54. end;
  55. end;
  56. function IntToRoman(num: Cardinal): String; {returns num in capital roman digits}
  57. const
  58. Nvals = 13;
  59. vals: array [1..Nvals] of word = (1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);
  60. roms: array [1..Nvals] of string[2] = ('I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
  61. var
  62. b: 1..Nvals;
  63. begin
  64. result := '';
  65. b := Nvals;
  66. while num > 0 do
  67. begin
  68. while vals[b] > num do
  69. dec(b);
  70. dec (num, vals[b]);
  71. result := result + roms[b]
  72. end;
  73. end;
  74.  
  75. function RomanToDec(const Value: string): integer;
  76. var
  77. i, lastValue, curValue: integer;
  78. begin
  79. Result := 0;
  80. lastValue := 0;
  81. for i := Length(Value) downto 1 do
  82. begin
  83. case UpCase(Value[i]) of
  84. 'C':
  85. curValue := 100;
  86. 'D':
  87. curValue := 500;
  88. 'I':
  89. curValue := 1;
  90. 'L':
  91. curValue := 50;
  92. 'M':
  93. curValue := 1000;
  94. 'V':
  95. curValue := 5;
  96. 'X':
  97. curValue := 10;
  98. else raise Exception.CreateFmt('Invalid character: %s', [Value[i]]);
  99. end;
  100. if curValue < lastValue then
  101. Dec(Result, curValue)
  102. else
  103. Inc(Result, curValue);
  104. lastValue := curValue;
  105. end;
  106. end;
  107. procedure TForm1.Edit1Change(Sender: TObject);
  108. var
  109. s:string;n:integer;
  110. begin
  111. s:=edit1.Text;
  112. for n:=length(s) downto 1 do
  113. begin
  114. if not (s[n] in ['0'..'9']) then delete(s, n ,1);
  115. end;
  116. edit1.Text:=s;
  117. end;
  118. procedure TForm1.Edit2Change(Sender: TObject);
  119. var
  120. s:string;n:integer;
  121. begin
  122. s:=edit2.Text;
  123. for n:=length(s) downto 1 do
  124. begin
  125. if not (s[n] in ['0'..'1']) then delete(s, n ,1);
  126. end;
  127. edit2.Text:=s;
  128. end;
  129.  
  130. procedure TForm1.Edit3Change(Sender: TObject);
  131. var
  132. s:string;n:integer;
  133. begin
  134. s:=edit3.Text;
  135. for n:=length(s) downto 1 do
  136. begin
  137. if not (s[n] in ['I','V','X','C','D','M','L']) then delete(s, n ,1);
  138. end;
  139. edit3.Text:=s;
  140.  
  141. end;
  142.  
  143.  
  144.  
  145. procedure TForm1.Button6Click(Sender: TObject);
  146. begin
  147. Close;
  148. end;
  149.  
  150. procedure TForm1.Button1Click(Sender: TObject);
  151. begin
  152. if edit1.Text<>'' then
  153. begin
  154. edit3.ShowHint:=false;
  155. if strtoint(edit1.Text)<=65535 then
  156. begin
  157. edit3.text:= IntToRoman(strtoint(edit1.Text));
  158. edit2.Text:=IntToBin(StrToInt(Edit1.Text),16);
  159. EDIT5.Text:=Format('%0x',[strtoint(edit1.text)]);
  160. if strtoint(edit1.Text)>3999 then begin edit3.ShowHint:=true; end;
  161. end else showmessage('Введено занадто велике значення');
  162. end;
  163. end;
  164.  
  165.  
  166. procedure TForm1.Button2Click(Sender: TObject);
  167. var
  168. i,result:integer;
  169. bin:string;
  170. begin
  171. if edit2.Text<>'' then
  172. begin
  173. edit3.ShowHint:=false;
  174. bin:=edit2.Text;
  175. result:=0;
  176. for i:=1 to length(bin) do
  177. begin
  178. if not (copy(edit2.Text,i,1)<>IntToStr(1)) then
  179. result:=result+(1 shl(length(bin)-i));
  180. end;
  181. edit1.text:=IntToStr(result);
  182. edit3.text:= IntToRoman(strtoint(edit1.Text));
  183. EDIT5.Text:=Format('%0x',[strtoint(edit1.text)]);
  184. if strtoint(edit1.Text)>3999 then begin edit3.ShowHint:=true; end;
  185. end;
  186. end;
  187.  
  188. procedure TForm1.Edit5Change(Sender: TObject);
  189. var
  190. s:string;n:integer;
  191. begin
  192. s:=edit5.Text;
  193. for n:=length(s) downto 1 do
  194. begin
  195. if not (s[n] in ['0'..'9','A','B','C','D','E','F']) then delete(s, n ,1);
  196. end;
  197. edit5.Text:=s;
  198. end;
  199.  
  200. procedure TForm1.Button4Click(Sender: TObject);
  201. begin
  202. if edit5.Text<>'' then
  203. begin
  204. edit3.ShowHint:=false;
  205. edit1.Text:=IntToStr(StrToInt('$'+edit5.text));
  206. edit3.text:= IntToRoman(strtoint(edit1.Text));
  207. edit2.Text:=IntToBin(StrToInt(Edit1.Text),16);
  208. if strtoint(edit1.Text)>3999 then begin edit3.ShowHint:=true; end;
  209. end;
  210. end;
  211.  
  212. procedure TForm1.BitBtn1Click(Sender: TObject);
  213. begin
  214. form2.ShowModal;
  215. end;
  216. procedure TForm1.Button3Click(Sender: TObject);
  217. begin
  218. if edit3.Text<>'' then
  219. begin
  220. edit3.ShowHint:=false;
  221. edit1.Text:=inttostr(RomanToDec(edit3.Text));
  222. if strtoint(edit1.Text)<=65535 then
  223. begin
  224. edit2.Text:=IntToBin(StrToInt(Edit1.Text),16);
  225. EDIT5.Text:=Format('%0x',[strtoint(edit1.text)]);
  226. if strtoint(edit1.Text)>3999 then begin edit3.ShowHint:=true; end;
  227. end else
  228. begin
  229. edit2.Text:=''; edit4.Text:=''; edit5.Text:='';
  230. end;
  231.  
  232. end;
  233. end;
  234.  
  235.  
  236. procedure TForm1.Edit4Change(Sender: TObject);
  237. var
  238. s:string;n:integer;
  239. begin
  240. s:=edit4.Text;
  241. for n:=length(s) downto 1 do
  242. begin
  243. if not (s[n] in ['0'..'7']) then delete(s, n ,1);
  244. end;
  245. edit4.Text:=s;
  246. end;
  247.  
  248.  
  249. end.
Add Comment
Please, Sign In to add comment