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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2010, 11:58   #1
Terrance!
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 66
По умолчанию кассы в delphi

Я уже наверное в печёнках сижу у всего форума со своими вопросами по классам, но всё же, не бросайте! Я уже почти разобрался в них!

Написал класс Tunit с работающим конструктором
Код:
unit Unit1;

interface

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

type
  Tunit = class

  private
  i:Tbitmap;
  x,y,o,n:integer;
  t:Ttimer;
  public
  constructor create;
  end;
  TForm1 = class(TForm)
    Timer1: TTimer;
    PaintBox1: TPaintBox;
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  z:integer;
implementation

{$R *.dfm}
constructor Tunit.create ;
begin

n:=1;
o:=1;
x:=100;
y:=100;
i:=tbitmap.Create;
i.Transparent:=true;
i.LoadFromFile(inttostr(n)+'/'+inttostr(o)+'/'+ inttostr(unit1.z)+'.bmp');
form1.PaintBox1.Canvas.Draw(x,y,i);
end;
end;



procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then Tunit.create;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 z:=z+1;
 if z>2 then z:=1;

end;

end.
Мучает вопрос!
Как назначить кусок конструктора

Код:
i.LoadFromFile(inttostr(n)+'/'+inttostr(o)+'/'+ inttostr(unit1.z)+'.bmp');
form1.PaintBox1.Canvas.Draw(x,y,i);
в таймер?
p. s.
пробовал так:
Код:
for unit1.Form1.Timer1
begin ...
- не получилось.
Terrance! вне форума Ответить с цитированием
Старый 20.09.2010, 12:14   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

никак. это же одна процедура, она работает целиком, напишите метод в котором вызывайте этот код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 12:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
form1.PaintBox1.Canvas.Draw(x,y,i);
А вот это вот я бы лучше упихнул в OnPaint Паинтбокса
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2010, 12:24   #4
Terrance!
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 66
По умолчанию

Можете пример показать?Я уже 2 дня на этот класс убил, всё яндексил, а ничего такого, про таймер не нашёл.
Terrance! вне форума Ответить с цитированием
Старый 20.09.2010, 12:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Но ты четко опиши задачу. Иначе получишь только примеры как с событиями работать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2010, 12:59   #6
Terrance!
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 66
По умолчанию

Код:
unit1.Form1.Timer1.OnTimer
begin

end;
вот что можно вставить в конструктор,
но компилятор кричит на эту строку:
[Error] Unit1.pas(50): Not enough actual parameters

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

Вот например создаю я Tunit.create, и , как я понял, всё что я написал в конструктор выполнится.
И я вот подумал, как же мне сделать так, чтобы например картинка, или какая нибудь переменная менялась в зависимости от условий, а проверка на наличие какого-то условия происходила постоянно.

Последний раз редактировалось Stilet; 20.09.2010 в 13:10.
Terrance! вне форума Ответить с цитированием
Старый 20.09.2010, 13:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ок. Вот класс-компонент со встроенным таймером, который пишет время в заголовок окна
Код:
unit Unit1;

interface

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

type
 Tunit=class(TComponent)
  private
   Timer1: TTimer;
   procedure Timer1Timer(Sender: TObject);
  public
   constructor Create(AOwner: TComponent);
 end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
   u:Tunit;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 u:=Tunit.Create(self);
end;


{ Tunit }

constructor Tunit.Create;
begin
 Timer1:=TTimer.Create(self);
 Timer1.OnTimer:=Timer1Timer;
 Timer1.Interval:=1000;
 Timer1.Enabled:=true;
end;


procedure Tunit.Timer1Timer(Sender: TObject);
begin
 form1.Caption:=TimeToStr(now);
end;

end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2010, 13:43   #8
Terrance!
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 66
По умолчанию

Да! Спасибо!

И ещё вопросик: Можно ли таким образом написать код для таймера внутри конструктора? Просто если я что-то пишу в поле конструктора, то могу пользоваться всеми переменными, включая все переменные этого класса.
А если в процедуре таймера, вне конструктора то переменные класса недоступны.

Последний раз редактировалось Terrance!; 20.09.2010 в 15:06.
Terrance! вне форума Ответить с цитированием
Старый 20.09.2010, 13:49   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А если в в процедуре таймера, вне конструктора то переменные класса недоступны.
Делай эти переменные полями класса или вообще глобальными переменными в модуле.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с програмой для кассы ManiacBHD Помощь студентам 2 27.01.2012 11:38
Переделать программу на кассы mephistophel Помощь студентам 0 12.06.2010 17:57
Мемоордер кассы SerArtur Microsoft Office Access 2 10.11.2008 15:42
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54