Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
uruha1986
0 / 0 / 2
Регистрация: 08.10.2012
Сообщений: 10
1

конструктор класса create

19.03.2013, 18:41. Просмотров 1951. Ответов 7
Метки нет (Все метки)

Добрый день. Имеется два класса TSensor_LaserSpot и TSensor_Adjment, второй класс необходимо создать если функция TSensor_LaserSpot.GetSignalStatus вернет специальный код возврата.
Условия: функция постоянно опрашивается. Простой вариант нашел и он самый очевидный - поставить флажок, если создали класс флаг перешел в true.

Delphi
1
2
3
4
5
6
7
Type TSensor_LaserSpot = class
................................
  public
    // получить статус сигнала принимаемого с датчиков
    Function GetSignalStatus() : UINT32_T;
..............................
end;
Delphi
1
Type TSensor_Adjment = class
Думалку сломал, может есть другой способ, чтобы лишних переменных не заводить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2013, 18:41
Ответы с готовыми решениями:

Конструктор класса
Всем привет! Объясните мне пожайлуста, зачем нужен конструктор? Например имеем MyClass = class ...

Конструктор дочернего класса
Подскажите пожалуйста, как написать конструктор дочернего класса, наследуемого от TComponent так,...

TFilestream.create [cannot create file]
function bat: string; begin with...

Конструктор класса и конструктор объекта - это одно и тоже?
Скажите, пожалуйста, кто знает, конструктор класса и конструктор объекта - это одно и тоже?

Для чего ещё может быть нужен конструктор класса кроме присвоения полям класса начальных значений?
Для чего ещё может быть нужен конструктор класса кроме присвоения полям класса начальных значений?

7
Shurvik
43 / 43 / 14
Регистрация: 12.02.2013
Сообщений: 151
19.03.2013, 19:00 2
Может добавить классовую функцию ? Нет ?
0
mss
2633 / 2258 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
19.03.2013, 19:53 3
Цитата Сообщение от uruha1986 Посмотреть сообщение
класс необходимо создать
Класс нельзя создать в ран-тайм.
0
cotseec
Пишу на Delphi...иногда
1408 / 1267 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
Завершенные тесты: 3
19.03.2013, 21:18 4
Цитата Сообщение от uruha1986 Посмотреть сообщение
второй класс необходимо создать если функция TSensor_LaserSpot.GetSignalStatus вернет специальный код возврата.
Условия: функция постоянно опрашивается.
1 значит известно,что она возвращает, при возврате необходимого значения выкидывать событие или сообщение, в обработчике которого этот экземпляр класса и будет создан
2 создать экземпляр класса сразу, но работоспособен он будет (его методы будут делать то, что требуется) только в случае, если функция вернула необходимое значение и установила флаг в этом экземпляре класса
3 пересмотреть логику программы
0
uruha1986
0 / 0 / 2
Регистрация: 08.10.2012
Сообщений: 10
19.03.2013, 22:34  [ТС] 5
cotseec, 2 обдумывалось уже обдумывалось как самый простой способ, ну и как запасной вариант.
Вот с логикой тяжеловато, ТЗ нету и не будет, У научника за неделю 10 раз минимум меняется мнение, что ему надо. Логику уже перестраивал 100500+ раз.
А вот по первому пункту немного не понял, это как примерно.
0
cotseec
Пишу на Delphi...иногда
1408 / 1267 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
Завершенные тесты: 3
19.03.2013, 23:25 6
Цитата Сообщение от uruha1986 Посмотреть сообщение
А вот по первому пункту немного не понял, это как примерно.
событие - как OnClick, OnShow, OnClose etc у классов, порожденных, например, от TForm, процедурный тип; сообщение - SendMessage или PostMessage, если нет интереса ждать обработки сообщения + объявление своего идентификатора сообщения, целочисленный тип...

обращение к TSensor_LaserSpot.GetSignalStatus (как вы пишете - опрос) идет ведь в каком-то экземпляре класса, так пусть этот объект при получении необходимого результата и создает экземпляр класса или выбрасывает событие или отправляет сообщение.....
может проще будет, если вы хотя бы опишите, что делаете или что собираетесь делать
0
uruha1986
0 / 0 / 2
Регистрация: 08.10.2012
Сообщений: 10
20.03.2013, 11:20  [ТС] 7
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Type TSensor_Adjment = class
  private
    Original_LaserSpot  : TLaserspot;
    CalibrationConst    : TCalConst_Sensor;
    LaserSpotArray      : TLaserSpotArray;
    Spot_Sensor         : TLaserspot;
  private
    Function StepSpot_Sensor(coordinate_LaserSpot:Double;CalConst:Massiv_Int16): INT32_T;
    // Функция определяет кол-во шагов которые должены отработать ШД
        Function GetStep_Sensor():TStep_Sensor;
  public
    // статус положения оптического элемента
    Function GetSensor_StatusPosition():UINT32_T;
 
    Property Step_Sensor : TStep_Sensor  read GetStep_Sensor;                   // кол-во шагов которые должены отработать ШД
    Property LaserSpot : LaserSpot_Pointer  write LaserSpotArray;               // координты пятна
 
    constructor create(Sensor: Dword; PathConfig:String); virtual;              //
end;

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Type TSensor_LaserSpot = class
  private
 
    Signal_ADC        : DataADC_pointer;
    SizeActiveRegion  : INT16_T;
    DarkSignal_ADC    : DataADC_pointer;
    TranscriptMethod  : UINT32_T;
  private
    Const MaxSignal = 4096;
    // преобразуем данные с АЦП в координаты
    // обобщенный протатип нахождения координат пятна
    Function DecodingADC_Sensor(DataSignal : TData_ADC) : TLaserspot;
    Function DarkSignalADC(DataSignal,DarkSignal : TData_ADC) : TData_ADC;
 
    // статус уровня сигнала принимаемого с датчиков (слабый, большой или нет сигнала)
    Function Sensor_LowSignal(Signal0 : TData_ADC; threshold:byte):boolean;
    Function Sensor_BigSignal(Signal0 : TData_ADC; threshold:byte):boolean;
    Function Sensor_NoSignal(Signal0,DarkSignal : TData_ADC):boolean;
 
    Function GetLaserSpot() :TLaserspot;
  public
    // получить статус сигнала принимаемого с датчиков
    Function GetSignalStatus() : UINT32_T;
 
    Property LaserSpot : TLaserspot read GetLaserSpot;
    Property Data_Sensor : DataADC_pointer write Signal_ADC;                          // при сборе данных сюда пишем значения с АЦП
    Property DarkSignal_Sensor : DataADC_pointer write DarkSignal_ADC;                // при сборе данных сюда пишем значения с АЦП
 
    constructor create( TranscriptM : UINT32_T; SizeActiveRegionSensor : INT16_T = SizeActiveRegion_S5991_01); virtual;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function TSensor_LaserSpot.GetSignalStatus: UINT32_T;
begin
  result:=CNST_SENSOR_NormalSignal;
  if Sensor_NoSignal(Signal_ADC^, DarkSignal_ADC^) then
    result := CNST_SENSOR_NoSignal
  else
    if Sensor_BigSignal(Signal_ADC^,90) then
      result := CNST_SENSOR_BigSignal
    else
      if Sensor_LowSignal(Signal_ADC^,10) then
        result := CNST_SENSOR_LowSignal
end;
Delphi
1
2
3
4
CNST_SENSOR_NoSignal     = (CNST_Sensor or $01);                                 // нет сигнала
  CNST_SENSOR_LowSignal    = (CNST_Sensor or $02);                                 // слабый сигнал
  CNST_SENSOR_BigSignal    = (CNST_Sensor or $03);                                 // большой сигнала
  CNST_SENSOR_NormalSignal = (CNST_Sensor or $04);                                 // сигнал в норме
Если функция возвращает CNST_SENSOR_NormalSignal, то класс Adjment можно создавать, в противном случае, смысла не имеет это дело. Сигнал будет плыть. соответственно поплывет и точность юстировки оптических элементов. Функция будет опрашивается в отдельном потоке, сразу после получения данных АЦП

Задумывалось, что TSensor_LaserSpot и TSensor_Adjment независимые сущности.

Добавлено через 2 минуты
ЗЫ. сборки, что как должно работать и в каком порядке, нет. Она только на бумаге.
0
cotseec
Пишу на Delphi...иногда
1408 / 1267 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
Завершенные тесты: 3
20.03.2013, 23:14 8
это все замечательно, но опять же - вы не написали где (в каком классе) идет обращение к GetSignalStatus, почему нельзя создать экземпляр TSensor_Adjment в функции опроса при получении значения CNST_SENSOR_NormalSignal (не в классе TSensor_LaserSpot, а в классе, где эта функция вызывается) .....
там, где необходимо обращаться к экземпляру TSensor_Adjment, чтобы не было AV, в случае отсутствия объекта обращение необходимо обернуть, например, в
Delphi
1
2
3
4
5
if Assigned(экземпляр TSensor_Adjment ) then
begin
 
 
end;

Не по теме:

а код оформлен красиво:good:

0
20.03.2013, 23:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 23:14

how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style?
please tell me how can i create mainmenu with any fonts wich i wont and how can i create mainmenu...

Create Form
Здравствуйте! Меня не устраивает окно form которое по дизайну такое же как OS . Я хочу сделать свой...

form2.create()
доброго времени суток. мне нужно чтоб рпи запуске программы вторая форма не создавалась (это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru