Помогите с классом, он должен быть оформлен как один модуль отвечающий за определённые действия(в моём случае за перевод систем счисления), я нашёл программку в одном из ранних топиков(Спасибо автору!) но не дойдёт до меня что я делаю не так...
Вот основной модуль:
Код:
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, смешно но другого небыло)