Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.01.2014, 02:33
kotophei999 kotophei999 вне форума
Прохожий
 
Регистрация: 07.01.2014
Сообщения: 4
Версия Delphi: Delphi XE5
Репутация: 10
Печаль Классы по модулям

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

P.P.S. Вот на что ругается
Изображения
Тип файла: png Безымянный.png (139.8 Кбайт, 5 просмотров)
Ответить с цитированием
  #3  
Старый 07.01.2014, 03:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Просто в секции Implementation функция IntToDigit должна быть указана с именем класса, так как является его частью.
Код:
implementation

function TPerevod.IntToDigit(aVal : Byte) : String;
...
тоже касается и всех остальных функций/процедур, которые есть/будут в составе класса TPerevod.

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  
Старый 07.01.2014, 04:13
kotophei999 kotophei999 вне форума
Прохожий
 
Регистрация: 07.01.2014
Сообщения: 4
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Просто в секции Implementation функция IntToDigit должна быть указана с именем класса, так как является его частью.
Код:
implementation

function TPerevod.IntToDigit(aVal : Byte) : String;
...
тоже касается и всех остальных функций/процедур, которые есть/будут в составе класса TPerevod.

P.S. Небольшее дополнение. Небходимо декларацию вынести из private в public, иначе они будут недоступны вызывающей программе.

а теперь в основном модуле ругается
Код:
procedure TForm1.btnPreobrClick(Sender: TObject);
begin
 edRezul.Text := TPerevod.DecimalToXStr(
    StrToInt(edOsnovNew.Text),
    StrToInt(edPrecision.Text),
    StrToFloat(edChisDec.Text)
  );
на последнюю строку
Ответить с цитированием
  #5  
Старый 07.01.2014, 04:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И правильно делает. Как можно обращаться к несуществующему объекту.
Код:
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  
Старый 07.01.2014, 04:25
kotophei999 kotophei999 вне форума
Прохожий
 
Регистрация: 07.01.2014
Сообщения: 4
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Спасибо огромное!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter