Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laba_5_3.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
141.1 Кб
Скачать

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]