![]() |
|
#1
|
|||
|
|||
![]() Помогите с классом, он должен быть оформлен как один модуль отвечающий за определённые действия(в моём случае за перевод систем счисления), я нашёл программку в одном из ранних топиков(Спасибо автору!) но не дойдёт до меня что я делаю не так...
Вот основной модуль: Код:
unit osnov; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.StdCtrls, classunit; type TForm1 = class(TForm) edChisDec: TEdit; // Исходное число в десятичной системе счисления. edOsnovNew: TEdit; // Число задающее основание системы счисления. edRezul: TEdit; //Результат преобразования DecToX edPrecision: TEdit; // Точность преобразования - количество знаков после запятой в edRezul btnPreobr: TButton; // Кнопка по нажатию на которую происходит преобразование. { Ниже - надписи для перечисленных выше элементов } Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure btnPreobrClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnPreobrClick(Sender: TObject); begin edRezul.Text := DecimalToXStr( StrToInt(edOsnovNew.Text), StrToInt(edPrecision.Text), StrToFloat(edChisDec.Text) ); end; end. А вот тот самый модуль: Код:
unit classunit; interface uses SysUtils; type TPerevod = Class(TObject) private function IntToDigit(aVal : Byte) : String; function DecimalToXStr (aBase : Byte; Precision : Byte; aVal : Extended) : String; end; // Конец определения класса TPerevod // Фактически, класс TForm1 теперь определен} implementation function IntToDigit(aVal : Byte) : String; begin case aVal of 0..9 : Result := IntToStr(aVal); 10 : Result := 'A'; 11 : Result := 'B'; 12 : Result := 'C'; 13 : Result := 'D'; 14 : Result := 'E'; 15 : Result := 'F'; end; end; function DecimalToXStr (aBase : Byte; Precision : Byte; aVal : Extended) : String; var Val : Extended; IntVal : Int64; FracVal : Extended; StrInt : String; StrFrac : String; i : Integer; begin // Получаем целую и дробную части числа. IntVal := Trunc(aVal); FracVal := Frac(aVal); //Переводим целую часть. StrInt := ''; repeat StrInt := IntToDigit(IntVal mod aBase) + StrInt; IntVal := IntVal div aBase; until IntVal = 0; // Если дробная часть = 0, то перевод закончен. if FracVal = 0 then begin Result := StrInt; exit; end; //Переводим дробную часть. Точность - до Precision цифр после запятой. StrFrac := ''; for i := 1 to Precision do begin Val := FracVal * aBase; StrFrac := StrFrac + IntToDigit(Trunc(Val)); FracVal := Frac(Val); //Если дробная часть = 0, то перевод закончен. if FracVal = 0 then Break; end; Result := StrInt + ',' + StrFrac; end; end. P.S. Дело с Delphi имею в первые, и работаю в XE5, смешно но другого небыло) |