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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2014, 13:45   #1
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию Обращение к конструктору нового класса

Доброе время суток.

Есть программа:
Код:
unit Unit1;

interface

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

type
 TCustomer = class
 //constructor create;

  private
  CustomerNomer :integer;
  CustomerPotok :integer;
  CustomerVremya :double;

  public
  property Nomer:integer
   read CustomerNomer;
  property Potok:integer
   read CustomerPotok;
  property Vremya:double
    read   CustomerVremya;

  constructor Create(const CustomerNomer :integer;
                     const CustomerPotok :integer;
                     const CustomerVremya :double);
    end;

  TForm1 = class(TForm)
    alfa: TEdit;
    Label1: TLabel;
    Button1: TButton;
    betta: TEdit;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure FormCreate(Sented: TObject);
	
  private
  myList: TList;
   Procedure showListContents;
    { Private declarations }
  public
  procedure gamma1;
  procedure gamma2;
  procedure gamma3;
  procedure Veibula;
  procedure LogNorm;
  procedure FormCreate(Sented: TObject);
    { Public declarations }
  end;

var
  Form1: TForm1;
  z: integer;
  w: integer;

implementation

{$R *.dfm}
//------------------------------------------------------
//Конструктор сохранение переданных пораметров
constructor Tcustomer.Create(const CustomerNomer :integer;
                             const CustomerPotok :integer;
                             const CustomerVremya :double);
begin
 self.CustomerNomer:= CustomerNomer;
 self.CustomerPotok:= CustomerPotok;
 self.CustomerVremya:= CustomerVremya;
end;
//-------------------------------------------------------
//Для показа содержимого нашего списка

procedure TForm1.ShowListContents;
var
  i : Integer;
begin
  // И повторный показ списка
  for i := 0 to myList.Count-1 do
  begin
    ShowMessage(inttostr(TCustomer(myList[i]).Nomer)+' is customer number '+
                IntToStr(TCustomer(myList[i]).Potok)+'  '+
                datetostr(TCustomer(mylist[i]).Vremya));
  end;
end;

//----------------------------------------------------------------------------
// Конструктор формы
// --------------------------------------------------------------------------
procedure TForm1.FormCreate(Sented: TObject);
var

begin
if z=4 then
  Begin
   if mylist.Count > 0 then
    begin
     myList.Delete(0);
    end;
  end
 else
  begin
   w:=w+1;
   myList.Add(TCustomer.Create(w,z,time));
  end;
  
end;
//-------------------------------------------
 //гаммо распределение а<1
procedure TForm1.gamma1;
 var c:integer;
     b,p,y,x,a,u1,u2:Extended;
begin
 a:=strtofloat(alfa.text);
 b:= (2.71+a)/2.71;
 c:=1;
 repeat
  randomize;
  u1:=random;
  p:=b*u1;
  if p>1  then
   begin
    y:=Exp((1/a)*Ln(p));
    u2:=random;
    if u2<=(Exp(-y*Ln(2.71))) then
     begin
      x:=y;
      c:=2;
      label8.Caption:=('x a<1 gamma   '+FloatToStr(x));
     end;
   end
   else
    begin
     y:=-Ln((b-p)/a);
       u2:=random;
       y:=abs(y);
       if u2<=-1*(Power(y,(a-1))) then
        begin
         x:=y;
         c:=2;
         label8.Caption:=('x a<1 gamma   '+FloatToStr(x));
        end;
    end;
until c=2;
z:=1;
FormCreate;

Timer1.Interval:=Trunc(x*1000);

end;
//-----------------------------------------

end.
Как правильно вызвать процедуру конструктора? Процедуру которую я вызываю и сам вызов выделил цветом.

Последний раз редактировалось Stilet; 01.12.2014 в 15:06.
Вовкин вне форума Ответить с цитированием
Старый 01.12.2014, 14:00   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,646
По умолчанию

FormCreate(nil)

Но необходимость принудительно вызывать этот конструктор весьма сомнительна.
Arigato вне форума Ответить с цитированием
Старый 01.12.2014, 14:24   #3
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение

Но необходимость принудительно вызывать этот конструктор весьма сомнительна.
А можно по подробней видимо я чего то не понимаю. А как тогда будет отрабатывать эта процедура??:con fused:
Вовкин вне форума Ответить с цитированием
Старый 01.12.2014, 14:26   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Конструктор формы
это не конструктор а обработчик события судя по всему.
причем он у вас объявлен два раза.

обработчик события это обычный метод по сути и его можно вызывать явно.
по умолчанию как Sender(у вас Sented) это сама форма с которой события связано.
то есть FormCreate(Self), вы же при вызове почему-то игнорируете параметры метода.

Вообще раз код обработчика нужен не в одном месте то выделите его в отдельный метод. и вызывайте и отдельно и в обработчике.
вызывать явно обработчики не очень хорошая практика.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.12.2014 в 14:29.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2014, 14:29   #5
Вовкин
Пользователь
 
Регистрация: 26.11.2014
Сообщений: 15
По умолчанию

программа конечно не дописана и я из нее вырезал большую часть чтобы не прикреплять файл.
Вовкин вне форума Ответить с цитированием
Старый 01.12.2014, 19:25   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,646
По умолчанию

Цитата:
Сообщение от Вовкин Посмотреть сообщение
А как тогда будет отрабатывать эта процедура??
FormCreate сам будет вызван после создания формы.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Builder обращение к методу класса из другого класса Astat Помощь студентам 2 20.01.2013 17:59
Создание нового класса в delphi marales Помощь студентам 3 30.12.2012 16:14
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
Подключение нового класса без перекомпиляции Хохол Общие вопросы по Java, Java SE, Kotlin 1 16.03.2010 04:34
Создание нового класса на базе существующего SpiritSm Общие вопросы Delphi 1 19.07.2007 10:11