Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2009, 20:01   #1
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
Восклицание Создание компонента Delphi 7

Дорогие знатоки, помогите в создании компонента.
Я написал алгоритм который переводит из символов в цифры, например "двадцать два" = "22",

теперь всё это мне нужно запихнуть в компонент, не могу разобраться что и куда
alex_triton вне форума Ответить с цитированием
Старый 06.10.2009, 20:04   #2
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
По умолчанию

Код:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);

var
  Form1: TForm1;
  str,sim:string;
  i,j,k:integer;
  fin:real;
  blok,z:integer;
  vre:string;

procedure TForm1.Button1Click(Sender: TObject);
const
  hislo1='один';
  hislo1_='одна';
  hislo2='два';
  hislo2_='две';
  hislo3='три';
  hislo4='четыре';
  hislo5='пять';
  hislo6='шесть';
  hislo7='семь';
  hislo8='восемь';
  hislo9='девять';
  hislo10='десять';
  hislo11='одинадцать';
  hislo12='двенадцать';
  hislo13='тринадцать';
  hislo14='четырнадцать';
  hislo15='пятнадцать';
  hislo16='шестнадцать';
  hislo17='семнадцать';
  hislo18='восемнадцать';
  hislo19='девятнадцать';
  hislo20='двадцать';
  hislo30='триндаць';
  hislo40='сорок';
  hislo50='пятьдесят';
  hislo60='шестьдесят';
  hislo70='семьдесят';
  hislo80='восемьдесят';
  hislo90='девяносто';
  hislo100='сто';
  hislo200='двести';
  hislo300='триста';
  hislo400='четыреста';
  hislo500='пятьсот';
  hislo600='шестьсот';
  hislo700='семьсот';
  hislo800='восемьсот';
  hislo900='девятьсот';
  hislo000='сотая';
  hislo0_00='сотых';
  hisloZ='целых';
  hisloZZ='целая';

begin
 blok:=0;
 fin:=0;
 j:=0;
 str:=Edit1.Text;
 str:=str+' ';
 for i:=0 to Length(Edit1.Text) do
  begin
   if str[i]=' ' then
    j:=j+1;
  end;
  if (str[1]='-') or (str[1]='1') or (str[1]='2') or (str[1]='3')
    or (str[1]='4') or (str[1]='5') or (str[1]='6') or (str[1]='7')
      or (str[1]='8') or (str[1]='9')
       then fin:=StrToFloat(Edit1.Text);
 i:=0;
 for k:=0 to j do
  begin
   i:=i+1;
  while (str[i]<>' ') do
    begin
     sim:=sim+str[i];
     i:=i+1;
    end;
   if blok<>1 then
    begin
     if sim=hislo900 then fin:=fin+900;
     if sim=hislo800 then fin:=fin+800;
     if sim=hislo700 then fin:=fin+700;
     if sim=hislo600 then fin:=fin+600;
     if sim=hislo500 then fin:=fin+500;
     if sim=hislo400 then fin:=fin+400;
     if sim=hislo300 then fin:=fin+300;
     if sim=hislo200 then fin:=fin+200;
     if sim=hislo100 then fin:=fin+100;
     if sim=hislo90 then fin:=fin+90;
     if sim=hislo80 then fin:=fin+80;
     if sim=hislo70 then fin:=fin+70;
     if sim=hislo60 then fin:=fin+60;
     if sim=hislo50 then fin:=fin+50;
     if sim=hislo40 then fin:=fin+40;
     if sim=hislo30 then fin:=fin+30;
     if sim=hislo20 then fin:=fin+20;
     if sim=hislo19 then fin:=fin+19;
     if sim=hislo18 then fin:=fin+18;
     if sim=hislo17 then fin:=fin+17;
     if sim=hislo16 then fin:=fin+16;
     if sim=hislo15 then fin:=fin+15;
     if sim=hislo14 then fin:=fin+14;
     if sim=hislo13 then fin:=fin+13;
     if sim=hislo12 then fin:=fin+12;
     if sim=hislo11 then fin:=fin+11;
     if sim=hislo10 then fin:=fin+10;
     if sim=hislo9 then fin:=fin+9;
     if sim=hislo8 then fin:=fin+8;
     if sim=hislo7 then fin:=fin+4;
     if sim=hislo6 then fin:=fin+6;
     if sim=hislo5 then fin:=fin+5;
     if sim=hislo4 then fin:=fin+4;
     if sim=hislo3 then fin:=fin+3;
     if (sim=hislo2) or (sim=hislo2_) then fin:=fin+2;
     if (sim=hislo1) or (sim=hislo1_) then fin:=fin+1;
    end;
   if (sim=hisloZ) or (sim=hisloZZ) then
    blok:=1;
   if blok=1 then
    begin
     if sim=hislo19 then fin:=fin+0.19;
     if sim=hislo18 then fin:=fin+0.18;
     if sim=hislo17 then fin:=fin+0.17;
     if sim=hislo16 then fin:=fin+0.16;
     if sim=hislo15 then fin:=fin+0.15;
     if sim=hislo14 then fin:=fin+0.14;
     if sim=hislo13 then fin:=fin+0.13;
     if sim=hislo12 then fin:=fin+0.12;
     if sim=hislo11 then fin:=fin+0.11;
     if sim=hislo9 then fin:=fin+0.9;
     if sim=hislo8 then fin:=fin+0.8;
     if sim=hislo7 then fin:=fin+0.7;
     if sim=hislo6 then fin:=fin+0.6;
     if sim=hislo5 then fin:=fin+0.5;
     if sim=hislo4 then fin:=fin+0.4;
     if sim=hislo3 then fin:=fin+0.3;
     if (sim=hislo2) or (sim=hislo2_) then fin:=fin+0.2;
     if (sim=hislo1) or (sim=hislo1_) then fin:=fin+0.1;
     if (sim=hislo000) or (sim=hislo0_00) then
      begin
       vre:=FloatToStr(fin);
       while vre[z]<>',' do
        z:=z+1;
       z:=z+1;
       if vre[z]='1' then fin:=fin-0.09;
       if vre[z]='2' then fin:=fin-0.18;
       if vre[z]='3' then fin:=fin-0.27;
       if vre[z]='4' then fin:=fin-0.36;
       if vre[z]='5' then fin:=fin-0.45;
       if vre[z]='6' then fin:=fin-0.54;
       if vre[z]='7' then fin:=fin-0.63;
       if vre[z]='8' then fin:=fin-0.72;
       if vre[z]='9' then fin:=fin-0.81;
      end;
    end;
   sim:='';
  end;
 blok:=0;
 if (str[1]='м') and (str[2]='и') then
  begin
   fin:=fin-fin*2;
  end;
 Label1.Caption:=FloatToStr(fin);
end;
end.
вот алгоритм, переведите его пожалуйста в компонент + код формы для тестирования, заранее спасибо

Последний раз редактировалось Stilet; 07.10.2009 в 08:37.
alex_triton вне форума Ответить с цитированием
Старый 06.10.2009, 20:05   #3
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
По умолчанию

из-за ограничений, удалил из алгоритма ненужное, например
Цитата:
private
{ Private declarations }
public
{ Public declarations }
end;

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
alex_triton вне форума Ответить с цитированием
Старый 06.10.2009, 20:32   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

имхо нерационально столь простую операцию пихать в компонент, мож функцией и подключаемым модулем обойдетесь?

но если надо, вот скелет:
Код:
unit vash modul;

interface

uses ваши либы;
type
  TListEvent       = procedure(Sender:TObject; Deskr:string) of object;

type
  TNUM=class(Tcomponent)

  private
 Fnum: integer;
 procedure FListChange(Sender: TObject);
...
public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property NUM: integer read Fnum write get_NUM; // визуальное свойство - входной параметр
    property STROKA: TListEvent read FListChange write FListChange; // выходное событие

end;

 procedure Register;

implementation

constructor TNUM.Create(AOwner: TComponent);
begin
 inherited Create(aowner)
end;

destructor Tnum.Destroy;
begin
 inherited
end;
//----------------

procedure tnum.get_num(Sender: TObject);
begin 
FlistChange(Self,ваша функция(fnum));
end;

//----------------
procedure Register;
begin
 RegisterComponents('ВАША ПАЛИТРА', [Tnum])
end;
надеюсь устанавливать компонент умеете?

пы-сы: устанавливать необязательно, достаточно подключить uses-ом, но вызвать create, но это ненаглядно
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 06.10.2009, 22:50   #5
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
По умолчанию

напиши вместе с моим алгоритмом, так я не могу разобраться.

да это домашку задали(((
alex_triton вне форума Ответить с цитированием
Старый 07.10.2009, 08:43   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот самый простой класс, с твоим кодом (частью его)
Код:
unit Unit2;

interface

  type TPerevod=class(TObject)
   Function getA(str:string):String;
  end;
implementation

{ TPerevod }

function TPerevod.getA;
 const
  hislo1='один';
  hislo1_='одна';
//......... и так далее

begin
   begin
 blok:=0;
 fin:=0;
 j:=0;
 str:=str+' ';
 for i:=0 to Length(str) do
  begin
   if str[i]=' ' then
    j:=j+1;
  end;
  if (str[1]='-') or (str[1]='1') or (str[1]='2') or (str[1]='3')
    or (str[1]='4') or (str[1]='5') or (str[1]='6') or (str[1]='7')
      or (str[1]='8') or (str[1]='9')
       then fin:=StrToFloat(Edit1.Text);
 i:=0;
 for k:=0 to j do
  begin
   i:=i+1;
  while (str[i]<>' ') do
    begin
     sim:=sim+str[i];
     i:=i+1;
    end;
   if blok<>1 then
    begin
     if sim=hislo900 then fin:=fin+900;
     if sim=hislo800 then fin:=fin+800;
     //...... И так далее

 blok:=0;
 if (str[1]='м') and (str[2]='и') then
  begin
   fin:=fin-fin*2;
  end;
 result:=FloatToStr(fin);
end;

end.
Смысл ясен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2009, 09:28   #7
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
По умолчанию

нет)))))

Вот создай компонент, родитель Эдит и вставь в него мой алгоритм и скинь код, пожалуйста,

я книги поперечитывал уже, но вот не догоняю((((
alex_triton вне форума Ответить с цитированием
Старый 07.10.2009, 14:03   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
напиши вместе с моим алгоритмом, так я не могу разобраться
- не напиши, а напишите, пожалуйста...
- вам остается вставить свою функцию только, не вижу чего-ж тут непонятного?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 07.10.2009, 20:48   #9
alex_triton
Пользователь
 
Регистрация: 06.10.2009
Сообщений: 32
Смущение =(

Извените за грубость, нерывы никакие

У меня ошибка какая-то, что-то типа вызова самого себя,

вот создал компонент и вставил код Компонент.rar

перекомппилируйте пожалуйста, исправив и желательно объясним ошибки, по возможности
alex_triton вне форума Ответить с цитированием
Старый 08.10.2009, 09:01   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

1.
TMyEdit1 = class(TEdit)
Function getA(str:string):String;
end;
он тут лишний однозначно

2. писать нужно function TMyEdit1.getA; а не TPerevod.getA
Ты же метод класса описываешь, а он у тя TMyEdit1 называется

3.
Код:
  var j,k,blok,m,i,z:integer;  sim,vre:string; fin:Double; // Описать то переменные надо.
  begin
 i:=0;
 m:=0;
 blok:=0;
 fin:=0;
 j:=0;
4. Нужно добавить в uses модул Dialogs чтоб работало ShowMessage('!!!');

Это как минимум.

Кстати этот чушь:
Код:
  if (str[1]='-') or (str[1]='1') or (str[1]='2') or (str[1]='3')
    or (str[1]='4') or (str[1]='5') or (str[1]='6') or (str[1]='7')
      or (str[1]='8') or (str[1]='9') or (str[1]='0')
       then fin:=StrToFloat(result);
работать не будет. Ты определись что ты тут делаешь и зачем.
I'm learning to live...

Последний раз редактировалось Stilet; 08.10.2009 в 09:04.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание компонента Neobrat Компоненты Delphi 3 01.05.2009 09:52
создание компонента Bayazet Общие вопросы Delphi 4 17.12.2008 16:48
Создание компонента russianstrike Компоненты Delphi 15 01.10.2008 19:22
Создание компонента. Черничный Компоненты Delphi 2 01.06.2008 23:28
Создание собственного компонента Леха207 Помощь студентам 1 03.07.2007 12:45