
Implementation
// -----------------------------------------------------------------------
// Реализация класса TDDisplay
// -----------------------------------------------------------------------
// КОНСТРУКТОР
constructor TDDisplay.Create (RqDisplay : TComponent; RqDigit : TEdit);
begin
inherited Create(RqDisplay); // Вызов конструктора из класса TIQueue
fDigit := RqDigit; // Инициализация ссылки на индикатор
end;
// Полная очистка дисплея
procedure TDDisplay.ClearDisplay(RqFillColor, RqRenColor : TColor);
begin
if (fDisplay is TImage)
then begin
with fDisplay as TImage do
begin
// Очистить переменные для прорисовки графика
fXStep := Width div MaxCount;
fCount := 0;
// Установить цвет поля дисплея и цвет пера
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := RqFillColor;
Canvas.FillRect(Rect(0,0,Width,Height));
Canvas.Pen.Color := RqRenColor;
end;
end;
end;
procedure TDDisplay.DrawCurrentLine(RqHigh : integer);
begin
with fDisplay as TImage do
begin
Canvas.MoveTo(fCount * fXStep, RqHigh);
fCount := fCount + 1;
Canvas.LineTo(fCount * fXStep, RqHigh);
end;
end;
procedure TDDisplay.DrawGoToNextLine(RqHigh : integer);
begin
with fDisplay as TImage do
begin
Canvas.LineTo(fCount * fXStep, RqHigh);
end;
end;
procedure TDDisplay.ShowItemQueue();
begin
if (fDisplay is TImage)
then begin
with fDisplay as TImage do
begin
// Очистить дисплай
ClearDisplay(clBlack, RGB(0,255,0));
// Прорисовать осциллограмму
if (fICount > 0) and Assigned(fPHead) and Assigned(fPTail)
then begin
// =========================================================
// РАЗРАБОТАТЬ ПЕРЕОПРЕДЕЛЯЮЩИЙ МЕТОД ОТОБРАЖЕНИЯ НА ДИСПЛЕЙ
// ОСЦИЛЛОГРАФА ShowItemQueue (Класс TDDisplay, unit Service3),
// КОТОРЫЙ СИНХРОННО ВЫВОДИТ ТЕКУЩЕЕ ЗНАЧЕНИЕ В ПОЛЕ Edit1.
// =========================================================
fPBuf := fPHead;
repeat
// fDigit.Text :=IntToStr (fPBuf.GetDataFromOBJ);
// Прорисовать линию текущего значения
DrawCurrentLine(Height - fPBuf.GetDataFromOBJ);
// Выборка из очереди следующего элемента
fPBuf := fPBuf.GetPNextFromOBJ();
If Assigned(fPBuf)
then begin
// Прорисовать линию перехода на следующее значение
DrawGoToNextLine(Height - fPBuf.GetDataFromOBJ);
end;
// Продолжать пока очередь не станет пустой
// fDigit.Text:=IntToStr(fptail.GetDataFromOBJ);
until not Assigned(fPBuf);
end;
end; end; end; end.