|
|
#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, смешно но другого небыло) |
#2
|
|||
|
|||
P.P.S. Вот на что ругается
|
#3
|
||||
|
||||
Просто в секции Implementation функция IntToDigit должна быть указана с именем класса, так как является его частью.
Код:
implementation function TPerevod.IntToDigit(aVal : Byte) : String; ... P.S. Небольшее дополнение. Небходимо декларацию вынести из private в public, иначе они будут недоступны вызывающей программе. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 07.01.2014 в 04:00. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
kotophei999 (07.01.2014)
|
#4
|
|||
|
|||
Цитата:
а теперь в основном модуле ругается Код:
procedure TForm1.btnPreobrClick(Sender: TObject); begin edRezul.Text := TPerevod.DecimalToXStr( StrToInt(edOsnovNew.Text), StrToInt(edPrecision.Text), StrToFloat(edChisDec.Text) ); |
#5
|
||||
|
||||
И правильно делает. Как можно обращаться к несуществующему объекту.
Код:
procedure TForm1.btnPreobrClick(Sender: TObject); begin with TPerevod.Create do try edRezul.Text := DecimalToXStr(StrToInt(edOsnovNew.Text), StrToInt(edPrecision.Text), StrToFloat(edChisDec.Text)); finally Free; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
kotophei999 (07.01.2014)
|
#6
|
|||
|
|||
Спасибо огромное!!!
|