Unit Service2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,
Service1;
// КЛАСС ПЕРЕОПРЕДЕЛЯЮЩИЙ ВЫВОД ОЧЕРЕДИ НА ДИСПЛЕЙ
type TDisplay = class(TIQueue)
private
fXStep : integer; // Шаг в пикселях для прорисовки одного значения
fCount : integer; // Счетчик прорисованных значений
procedure ClearDisplay(RqFillColor, RqRenColor : TColor);
procedure DrawCurrentLine(RqHigh : integer);
procedure DrawGoToNextLine(RqHigh : integer);
public
procedure ShowItemQueue(); override;
end;
implementation
// -----------------------------------------------------------------------
// Реализация класса TDisplay
// -----------------------------------------------------------------------
// Полная очистка дисплея
procedure TDisplay.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 TDisplay.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 TDisplay.DrawGoToNextLine(RqHigh : integer);
begin
with fDisplay as TImage do
begin
Canvas.LineTo(fCount * fXStep, RqHigh);
end;
end;
// ОТОБРАЗИТЬ ОЧЕРЕДЬ В ДИСПЛЕЙ
procedure TDisplay.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
fPBuf := fPHead;
repeat
// Прорисовать линию текущего значения
DrawCurrentLine(Height - fPBuf.GetDataFromOBJ);
// Выборка из очереди следующего элемента
fPBuf := fPBuf.GetPNextFromOBJ();
if Assigned(fPBuf)
then begin
// Прорисовать линию перехода на следующее значение
DrawGoToNextLine(Height - fPBuf.GetDataFromOBJ);
end;
// Продолжать пока очередь не станет пустой
until not Assigned(fPBuf);
end;
end;
end;
end;
end.
Unit Service3;
Interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,
Service1;
// КЛАСС ПЕРЕОПРЕДЕЛЯЮЩИЙ ВЫВОД ОЧЕРЕДИ НА ДИСПЛЕЙ И ИНДИКАТОР
type TDDisplay = class(TIQueue)
private
fXStep : integer; // Шаг в пикселях для прорисовки одного значения
fCount : integer; // Счетчик прорисованных значений
fDigit : TEdit; // Ссылка на дополнительный цифровой индикатор
procedure ClearDisplay(RqFillColor, RqRenColor : TColor);
procedure DrawCurrentLine(RqHigh : integer);
procedure DrawGoToNextLine(RqHigh : integer);
public
constructor Create (RqDisplay : TComponent; RqDigit : TEdit);
procedure ShowItemQueue(); override;
end;
