unit DDisplayTools;
// -----------------------------------------------------------
interface
uses  SysUtils, Graphics, Dialogs, StdCtrls, ExtCtrls, DDisplayGUI, DDisplayQE;
// -----------------------------------------------------------
// Преобразование Edit.Text в цифру
function EditTextToFloat (var RqData : double; RqEdit : TEdit) : boolean;
// -----------------------------------------------------------
// Создание объекта ДИСПЛЕЙ
procedure DDisplayGreate (var RqDDisplay : TDDisplay; RqImage : TImage);
// Ликвидация объекта ДИСПЛЕЙ
procedure DDisplayDestroy(var RqDDisplay : TDDisplay);
// Включить / отключить обработчик события значение прорисовано
procedure OnOffDDisplayItemDraw (RqDDisplay : TDDisplay;
                                 RqOn       : boolean;
                                 OnItemDraw : TIQNotify);
// Включить / отключить обработчик события значение выше порога
procedure OnOffDDisplayAlertItem (RqDDisplay : TDDisplay;
                                 RqOn       : boolean;
                                 OnAlertItem : TIQNotify);
// Установка цветовых атрибутов дисплея
procedure SetDDisplayColor (RqDDisplay    : TDDisplay;
                            RqColorDialog :TColorDialog;
                            RqProp        : byte);
// Отображение цветовых атрибутов дисплея
procedure ShowCororIndicators(RqDDisplay   : TDDisplay;
                              RqSTxtBColor : TStaticText;
                              RqSTxtDColor : TStaticText;
                              RqSTxtGColor : TStaticText);
// Добавить точку в конец осциллограммы и отобразить осциллограмму
procedure AddPointToDDisplay(RqDDisplay : TDDisplay;
                             RqStyle    : integer;
                             RqPoint    : double);
// -----------------------------------------------------------
implementation
// -----------------------------------------------------------
// Преобразование Edit.Text в цифру
function EditTextToFloat (var RqData : double; RqEdit : TEdit) : boolean;
var BufData  : double;
begin
  Result := False;     // Песимистический прогноз операции
  try
    BufData := StrToFloat(RqEdit.Text);
    RqEdit.Color := clWindow;
    RqData := BufData;
    Result := True;    // Операция завершилась успешно
  except
    RqEdit.Color := clCream;
    ShowMessage('НЕ МОГУ ПРЕОБРАЗОВАТЬ В ЦИФРУ');
  end;
end;
// -----------------------------------------------------------
// Создание объекта ДИСПЛЕЙ
procedure DDisplayGreate (var RqDDisplay : TDDisplay; RqImage : TImage);
begin
   if not Assigned(RqDDisplay)
   then begin
      try    RqDDisplay := TDDisplay.Create(RqImage);
             RqDDisplay.DMaxCount := 50;
             // Отобразить текущую осциллограмму
             RqDDisplay.ShowItemQueue();
      except RqDDisplay := nil;
      end;
   end;
end;
// Ликвидация объекта ДИСПЛЕЙ
procedure DDisplayDestroy(var RqDDisplay : TDDisplay);
begin
  if Assigned(RqDDisplay)
  then begin
    RqDDisplay.Free;
    RqDDisplay := nil;
  end;
end;
// -----------------------------------------------------------
// Включить / отключить обработчик события значение прорисовано
procedure OnOffDDisplayItemDraw (RqDDisplay : TDDisplay;
                                 RqOn       : boolean;
                                 OnItemDraw : TIQNotify);
begin
  if Assigned(RqDDisplay)
  then begin
     if RqOn
     then RqDDisplay.OnDrawItem := OnItemDraw
     else RqDDisplay.OnDrawItem := nil;
  end;
end;
// Включить / отключить обработчик события значение выше порога
procedure OnOffDDisplayAlertItem (RqDDisplay : TDDisplay;
                                 RqOn       : boolean;
                                 OnAlertItem : TIQNotify);
begin
  if Assigned(RqDDisplay)
  then begin
     if RqOn
     then RqDDisplay.OnAlertItem := OnAlertItem
     else RqDDisplay.OnAlertItem := nil;
  end;
end;
// -----------------------------------------------------------
// Установка цветовых атрибутов дисплея
procedure SetDDisplayColor (RqDDisplay    : TDDisplay;
                            RqColorDialog :TColorDialog;
                            RqProp        : byte);
begin
   if Assigned(RqDDisplay)
   then begin
     if RqColorDialog.Execute
     then begin
        case RqProp of
        1 : RqDDisplay.BColor := RqColorDialog.Color;  // Цвета луча дисплея
        2 : RqDDisplay.DColor := RqColorDialog.Color;  // Цвет поля дисплея
        3 : RqDDisplay.GColor := RqColorDialog.Color;  // Цвет сетки дисплея
        end;
        RqDDisplay.ShowItemQueue();
     end;
   end;
end;
// Отображение цветовых атрибутов дисплея
procedure ShowCororIndicators(RqDDisplay   : TDDisplay;
                              RqSTxtBColor : TStaticText;
                              RqSTxtDColor : TStaticText;
                              RqSTxtGColor : TStaticText);
begin
   if Assigned(RqDDisplay)
   then begin
      // Прочитать цвет луча, поля и сетки дисплея
      RqSTxtBColor.Color    := RqDDisplay.BColor;
      RqSTxtDColor.Color    := RqDDisplay.DColor;
      RqSTxtGColor.Color    := RqDDisplay.GColor;

   end;
end;
// Добавить точку в конец осциллограммы и отобразить осциллограмму
procedure AddPointToDDisplay(RqDDisplay : TDDisplay;
                             RqStyle    : integer;
                             RqPoint    : double);
begin
  if Assigned(RqDDisplay)
  then begin
      RqDDisplay.AddItemToTail(0, RqPoint);  // Добавить точку
      case RqStyle of
      0 : RqDDisplay.ShowItemQueue();        // Цифровая осциллограмма
      1 : RqDDisplay.AnalogShowItemQueue();  // Аналоговая рсциллограмма
      end;
  end;
end;

// -----------------------------------------------------------

end.
