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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 19:02   #1
B13eR
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию Проблемка(Delphi)

Опишите класс Counter, который используется для хранения целочисленного значения счетчика и содержит методы его увеличения на 1 и получения значения счетчика.

Вообщем столкнулся с такой проблемой, присваиваю значению счетчика, значения с Edit1, в процедуре Up описываю счётчик +1. Только вот счётчик не принемает значение с Edit(a), а начинает увеличивать счетчик с 0.

Код:
 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1; Counter: TCounter;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var sch:integer;
begin

sch:=strtoint(Form1.Edit1.Text);
counter.Up;
Form1.Memo1.Lines.Add(inttostr(counter.Get));

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
counter:=TCounter.create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
counter.destroy;
end;

end.
Код:
 unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TCounter = class
  private
    { Private declarations }
  public
    sch:integer;
    procedure Up;
    function Get:integer;
    constructor create;
  end;

implementation


procedure TCounter.Up;
begin
sch:=sch+1;
end;
function TCounter.Get:integer;
begin
Get:=sch;
end;
constructor TCounter.create;
begin
inherited create;
sch:=0;
end;

end.
B13eR вне форума Ответить с цитированием
Старый 18.01.2012, 19:08   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin

Counter.sch:=strtoint(Form1.Edit1.Text);
counter.Up;
Form1.Memo1.Lines.Add(inttostr(counter.Get));

end;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 18.01.2012, 19:11   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Вместо sch:=strtoint(Form1.Edit1.Text);
нужно counter.sch:=strtoint(Form1.Edit1.T ext);
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 18.01.2012, 19:14   #4
B13eR
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию

Спасибо, помогло, только вот теперь он счетчик только 1 раз увеличивает на 1 и в мэмо пишет одно и тоже число
B13eR вне форума Ответить с цитированием
Старый 18.01.2012, 19:17   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
олько вот теперь он счетчик только 1 раз увеличивает на 1 и в мэмо пишет одно и тоже число
Потому что каждый раз идет присваивание с Edit
Цитата:
Код:
Counter.sch:=strtoint(Form1.Edit1.Text);
Ну а если Edit вы не меняете то получается что он берёт одно и тоже число и увеличивает его на 1
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303

Последний раз редактировалось Hacker19_90; 18.01.2012 в 19:19.
Hacker19_90 вне форума Ответить с цитированием
Старый 18.01.2012, 19:21   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  K:integer;
begin

Counter.sch:=strtoint(Form1.Edit1.Text);
counter.Up;
Form1.Memo1.Lines.Add(inttostr(counter.Get));
k:=StrToInt(Form1.Edit1.Text)+1;
Form1.Edit1.Text:=IntToStr(k);
end;
P.S. Чета я медленный сегодня
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 18.01.2012, 20:22   #7
B13eR
 
Регистрация: 18.01.2012
Сообщений: 4
По умолчанию

Так вообще класс, только 1 нюанс. Хочу, что бы в Edit(e) введенное значение не изменялось.
Убераю строку:
Код:
Form1.Edit1.Text:=IntToStr(k);
И возвращаюсь к проблемме, счетчик увеличивается только 1 раз.
B13eR вне форума Ответить с цитированием
Старый 18.01.2012, 21:40   #8
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

можно так попробовать:
Код:
var
  Form1: TForm1; Counter: TCounter;
  k:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//var
//  K:integer;
begin

Counter.sch:=strtoint(Form1.Edit1.Text)+k;
counter.Up;
Form1.Memo1.Lines.Add(inttostr(counter.Get));
inc(k);
//Form1.Edit1.Text:=IntToStr(k);
end;
               
procedure TForm1.FormCreate(Sender: TObject);
begin
counter:=TCounter.create;
end;
              
procedure TForm1.Button2Click(Sender: TObject);
begin
counter.destroy;
end;
initialization
K:=0;

end.
И еще для Edit1 описать событие OnChange:
Код:
procedure TForm1.sbros(Sender: TObject);
begin
  k:=0;
end;
Все тривиальное просто

Последний раз редактировалось whatever; 18.01.2012 в 21:44.
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемка Assman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.06.2010 17:24
ПРОБЛЕМКА Kirill99 Помощь студентам 8 19.04.2010 18:51
проблемка lucky Паскаль, Turbo Pascal, PascalABC.NET 1 12.05.2009 22:32
проблемка( Alexcomeback Общие вопросы C/C++ 4 16.04.2009 18:38