5.4 Додаткові елементи інтерфейсу

До додаткових елементів інтерфейсу відносяться елементи для текстового представлення відображуваної інформації, та елементи встановлення часу спрацювання таймера.

В нижній частині головної форми присутне текстове представлення 15 останніх результатів вимірювань. Дане текстове представлення змінюється зі зміною останніх даних, і не змінюється при прокрутці графічного зображення.

Також в нижній частині реалізовані елементи для швидкої зміни частоти запуску таймера. По замовчуванню таймер спрацювує кожні 200 млс, що призводить до зчитування даних з джерела, та занесення значення в динамічний список.

Дані елементи інтерфейсу користувача програми можна побачити на рис.3.


ВИСНОВОК

Програма „Візуальний облік вхідних даних інтерфейсу RS-232” призначена для ведення обліку даних, що поступають на вхід стандартного інтерфейсу RS-232(COM-порт), а також для графічного відображення вхідних даних у вигляді графіку та збереження отриманих даних у файлах відповідних форматів.

Програма дозволяє відображувати дані, що приходять на СОМ-порти, у вигляді, який необхідний користувачу. Для відображення графіку використовуються низка опцій, за допомогою яких користувач може отримати зображення графіка таким, який йому необхідний.

Програмний продукт розрахований на користувачів, яким необхідно досліджувати особливості роботи пристроїв, які підключаються до стандартних інтерфейсів ЕОМ.

Програма створена для Win32 операційних систем і має зручний та лекий в засвоєнні графічний інтерфейс, оскільки дуже нагадує стандартні інтерфейси Windows. Розроблені діалоги, підказки та інструкція дозволяють користувачам, у яких малий досвід роботи з комп’ютером та подібним програмним забезпеченням, в короткі сроки освоїти програму.

Програма реалізована за допомогою сучасних інструментальних засобів візуальної об’єктно-орієнтованої мови програмування Delphi 6.0 та задовільняє всі пункти передбачені в технічному завданні.


ЛІТЕРАТУРА

 

1.       Ай Пен, Разработка периферийных устройств.

2.       Титов Олег, Работа с коммуникационными портами (COM и LPT) в программах для Win32.

3.       Как программировать на Delphi 4.0: Пер. с англ./ Франк Энго. – К.: Издательство “ДиалСофт”, 1999. – 430с.

4.       Надежность и эффективность в технике: Справочник: в 10 т.-М.:Машиностроение: Том 5. Проетный анализ надежности. – 1988 г., 316 с.

5.       Основы эксплуатации ЭВМ: Учеб. Пособие для вузов/Под ред. Б.М. Кагана. – 2-е изд., перераб и доп.-М.: Эенергоатомиздат, 1988. –432 с.: ил.

6.       Секреты 32-разрядного программирования в Delphi: Пер. с англ./ Сван Том. – К.: Диалектика, 1997. – 480с., ил.

7.       Секреты Delphi 2: Пер. с англ./Рэй Лишнер. – К.: НИПФ «ДиаСофтЛтд.», 1996. – 800 с.


ДОДАТОК

ТЕКСТ ПРОГРАМИ

“ВІЗУАЛЬНИЙ ОБЛІК ВХІДНИХ ДАНИХ

ІНТЕРФЕЙСУ RS-232”

Текст основної програми

program Project1;

uses

Forms,

MainForm in 'MainForm.pas' {Form1 Головна форма},

GraphicDiagram in 'GraphicDiagram.pas',

Unit3 in 'Unit3.pas' {Form3},

aboutProgram in 'aboutProgram.pas' {AboutBox},

Unit4 in 'Unit4.pas' {Form4};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TAboutBox, AboutBox);

Application.CreateForm(TForm3, Form3);

Application.CreateForm(TForm4, Form4);

Application.Run;

end.

Текст форми MainForm

unit MainForm;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, ExtCtrls, Buttons, StdCtrls, GraphicDiagram, ExtDlgs,

ComCtrls, ToolWin, ActnList, ImgList;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

Fileitem: TMenuItem;

ItemNew: TMenuItem;

N2: TMenuItem;

SavePicture: TMenuItem;

SaveData: TMenuItem;

N5: TMenuItem;

ItemExit: TMenuItem;

Run: TMenuItem;

StartLoad: TMenuItem;

Pause: TMenuItem;

Face: TMenuItem;

Pilar: TMenuItem;

Lines: TMenuItem;

Options: TMenuItem;

COMport: TMenuItem;

LPTport: TMenuItem;

Generator: TMenuItem;

N19: TMenuItem;

PortOption: TMenuItem;

GeneratorOption: TMenuItem;

Help: TMenuItem;

About: TMenuItem;

UserGuide: TMenuItem;

Panel1: TPanel;

PanelInstrument: TPanel;

SpeedButton1: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton2: TSpeedButton;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton;

SpeedButton6: TSpeedButton;

Timer1: TTimer;

GraphicDiagram1: TGraphicDiagram;

ScrollBar1: TScrollBar;

SavePictureDialog1: TSavePictureDialog;

SaveDialog1: TSaveDialog;

ActionList1: TActionList;

ImageList1: TImageList;

newGraphic: TAction;

saveDataGr: TAction;

LoadDataGR: TAction;

SaveGraph: TAction;

StartGr: TAction;

StopGr: TAction;

HelpPr: TAction;

ExitPr: TAction;

N7: TMenuItem;

SpeedButton7: TSpeedButton;

N8: TMenuItem;

OpenDialog1: TOpenDialog;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Edit11: TEdit;

Edit12: TEdit;

Edit13: TEdit;

Edit14: TEdit;

Edit15: TEdit;

Label1: TLabel;

Edit16: TEdit;

BitBtn1: TBitBtn;

procedure ItemExitClick(Sender: TObject);

procedure Panel1Resize(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure PanelInstrumentResize(Sender: TObject);

procedure ItemNewClick(Sender: TObject);

// procedure SavePictureClick(Sender: TObject);

// procedure SaveDataClick(Sender: TObject);

procedure PauseClick(Sender: TObject);

procedure ClearClick(Sender: TObject);

procedure LinesClick(Sender: TObject);

procedure Start(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure SavePictureClick(Sender: TObject);

procedure GeneratorClick(Sender: TObject);

procedure LPTportClick(Sender: TObject);

procedure COMportClick(Sender: TObject);

procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;

var ScrollPos: Integer);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure AboutClick(Sender: TObject);

procedure newGraphicExecute(Sender: TObject);

procedure ExitPrExecute(Sender: TObject);

procedure StartGrExecute(Sender: TObject);

procedure StopGrExecute(Sender: TObject);

procedure SaveGraphExecute(Sender: TObject);

procedure saveDataGrExecute(Sender: TObject);

procedure HelpPrExecute(Sender: TObject);

procedure LoadDataGRExecute(Sender: TObject);

procedure ChangeTable(k:integer);

procedure BitBtn1Click(Sender: TObject);

procedure GeneratorOptionClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit3, aboutProgram, Unit4;

{$R *.dfm}

procedure TForm1.ItemExitClick(Sender: TObject);

begin

close;

end;

procedure TForm1.ChangeTable(k:integer);

var t:integer;

begin

t:=GraphicDiagram1.GetPointsCount;

if t<>0 then begin

if t>15 then

begin

Edit1.Text:=Edit2.Text;

Edit2.Text:=Edit3.Text;

Edit3.Text:=Edit4.Text;

Edit4.Text:=Edit5.Text;

Edit5.Text:=Edit6.Text;

Edit6.Text:=Edit7.Text;

Edit7.Text:=Edit8.Text;

Edit8.Text:=Edit9.Text;

Edit9.Text:=Edit10.Text;

Edit10.Text:=Edit11.Text;

Edit11.Text:=Edit12.Text;

Edit12.Text:=Edit13.Text;

Edit13.Text:=Edit14.Text;

Edit14.Text:=Edit15.Text;

Edit15.Text:=IntToStr(k);

end

else begin

case t of

1: Edit1.Text:=IntToStr(GraphicDiagram1.GetValue(0));

2: Edit2.Text:=IntToStr(k);

3: Edit3.Text:=IntToStr(k);

4: Edit4.Text:=IntToStr(k);

5: Edit5.Text:=IntToStr(k);

6: Edit6.Text:=IntToStr(k);

7: Edit7.Text:=IntToStr(k);

8: Edit8.Text:=IntToStr(k);

9: Edit9.Text:=IntToStr(k);

10: Edit10.Text:=IntToStr(k);

11: Edit11.Text:=IntToStr(k);

12: Edit12.Text:=IntToStr(k);

13: Edit13.Text:=IntToStr(k);

14: Edit14.Text:=IntToStr(k);

15: Edit15.Text:=IntToStr(k);

end;

end;

end;

end;

procedure TForm1.Panel1Resize(Sender: TObject);

begin

// panel1.Width:=form1.Width-10;

// panel1.Height:=form1.Height-200;

end;

procedure TForm1.FormResize(Sender: TObject);

begin

GraphicDiagram1.Resize(TControl(panel1));

// panel1Resize(self);

PanelInstrumentResize(self);

end;

procedure TForm1.PanelInstrumentResize(Sender: TObject);

begin

PanelInstrument.Width:=form1.Width-10;

end;

procedure TForm1.ItemNewClick(Sender: TObject);

var n:integer;

begin

GraphicDiagram1.Clear;

ScrollBar1.Enabled:=false;

end;

procedure TForm1.PauseClick(Sender: TObject);

begin

if GraphicDiagram1.GetPointsCount<>1 then

begin

if SpeedButton4.Caption='Запуск' then

begin

Fileitem.Enabled:=false;

// Interpolation.Enabled:=false;

Options.Enabled:=false;

SpeedButton1.Enabled:=false;

SpeedButton2.Enabled:=false;

SpeedButton3.Enabled:=false;

SpeedButton4.Caption:='Зупинити';

StartLoad.Caption:='Зупинити';

Timer1.Interval:=GraphicDiagram1.NumMiliSec;

Timer1.Enabled:=True;

Pause.Enabled:=true;

SpeedButton5.Enabled:=true;

end else

begin

if GraphicDiagram1.GetPointsCount>GraphicDiagram1.DrawCount then

begin

ScrollBar1.Enabled:=true;

ScrollBar1.SetParams(GraphicDiagram1.GetPointsCount,0,GraphicDiagram1.GetPointsCount);

end;

Fileitem.Enabled:=true;

// Interpolation.Enabled:=true;

Options.Enabled:=true;

SpeedButton1.Enabled:=true;

SpeedButton2.Enabled:=true;

SpeedButton3.Enabled:=true;

SpeedButton4.Caption:='Запуск';

StartLoad.Caption:='Запуск';

Timer1.Enabled:=false;

Pause.Enabled:=false;

SpeedButton5.Enabled:=false;

//Stop;

end;

end

else

begin

ScrollBar1.Enabled:=false;

Pause.Enabled:=false;

SpeedButton5.Enabled:=false;

end;

end;

procedure TForm1.ClearClick(Sender: TObject);

begin

form1.ItemNewClick(self);

end;

procedure TForm1.Start;

var

n:TPoint;

begin

new(n);

n^:=Random(255);

GraphicDiagram1.AddValue(n);

ChangeTable(n^);

end;

procedure TForm1.LinesClick(Sender: TObject);

begin

if not(Lines.Checked)then

begin

GraphicDiagram1.TypeDiagram:=tdLine;

Lines.Checked:=true;

Pilar.Checked:=false;

end else

begin

GraphicDiagram1.TypeDiagram:=tdColumn;

Lines.Checked:=false;

Pilar.Checked:=true;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

inherited;

randomize;

Form1.Pause.Enabled:=false;

Form1.SpeedButton5.Enabled:=false;

ScrollBar1.Enabled:=false;

Edit1.Text:='0';

// SaveDialog1.Create(self);

end;

procedure TForm1.SavePictureClick(Sender: TObject);

var

k:integer;

t:String;

begin

if SavePictureDialog1.Execute then

begin

t:=SavePictureDialog1.FileName;

repaint;

k:=GraphicDiagram1.SavePicture(t);

if k=0 then MessageDlg('Помилка при записі файла '+t,mtError,[mbOk],0);

end;

end;

procedure TForm1.GeneratorClick(Sender: TObject);

begin

if not(Generator.Checked) then

begin

Generator.Checked:=true;

COMport.Checked:=false;

LPTport.Checked:=false;

end;

end;

procedure TForm1.LPTportClick(Sender: TObject);

begin

if not(LPTport.Checked)then

begin

Generator.Checked:=false;

COMport.Checked:=false;

LPTport.Checked:=true;

end;

end;

procedure TForm1.COMportClick(Sender: TObject);

begin

if not(COMport.Checked)then

begin

Generator.Checked:=false;

COMport.Checked:=true;

LPTport.Checked:=false;

end;

end;

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;

var ScrollPos: Integer);

begin

if ScrollCode=scEndScroll then

begin

if (ScrollPos<>0) and (ScrollPos<>GraphicDiagram1.GetPointsCount) then

begin

GraphicDiagram1.DrawStart:=ScrollPos-1;

GraphicDiagram1.Invalidate;

end

else if ScrollPos=0 then

begin

GraphicDiagram1.DrawStart:=0;

GraphicDiagram1.Invalidate;

end else

begin

GraphicDiagram1.DrawStart:=ScrollPos-1;

GraphicDiagram1.Invalidate;

end;

end;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Form3.Showmodal;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

//form2.Show;

end;

procedure TForm1.N4Click(Sender: TObject);

begin

form3.Show;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

// form4.show;

end;

procedure TForm1.AboutClick(Sender: TObject);

begin

aboutbox.showmodal;

end;

procedure TForm1.newGraphicExecute(Sender: TObject);

begin

form1.ItemNewClick(self);

end;

procedure TForm1.ExitPrExecute(Sender: TObject);

begin

close;

end;

procedure TForm1.StartGrExecute(Sender: TObject);

begin

ScrollBar1.Enabled:=false;

Fileitem.Enabled:=false;

// Interpolation.Enabled:=false;

Options.Enabled:=false;

SpeedButton1.Enabled:=false;

SpeedButton2.Enabled:=false;

SpeedButton3.Enabled:=false;

Timer1.Interval:=GraphicDiagram1.NumMiliSec;

Timer1.Enabled:=True;

Pause.Enabled:=true;

SpeedButton5.Enabled:=true;

end;

procedure TForm1.StopGrExecute(Sender: TObject);

begin

if GraphicDiagram1.GetPointsCount>GraphicDiagram1.DrawCount then

begin

ScrollBar1.Enabled:=true;

ScrollBar1.SetParams(GraphicDiagram1.GetPointsCount,0,GraphicDiagram1.GetPointsCount);

end;

Fileitem.Enabled:=true;

// Interpolation.Enabled:=true;

Options.Enabled:=true;

SpeedButton1.Enabled:=true;

SpeedButton2.Enabled:=true;

SpeedButton3.Enabled:=true;

Timer1.Enabled:=false;

Pause.Enabled:=false;

end;

procedure TForm1.SaveGraphExecute(Sender: TObject);

begin

SavePictureClick(Sender);

end;

procedure TForm1.saveDataGrExecute(Sender: TObject);

begin

if SaveDialog1.Execute then

GraphicDiagram1.SaveData(SaveDialog1.FileName);

end;

procedure TForm1.HelpPrExecute(Sender: TObject);

begin

aboutBox.ShowModal;

end;

procedure TForm1.LoadDataGRExecute(Sender: TObject);

begin

if openDialog1.Execute then

begin

if fileExists (openDialog1.FileName) then

GraphicDiagram1.LoadData(openDialog1.FileName)

else messageDlg('Немає такого файлу!!',mtError,[mbOk],0);

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

try

GraphicDiagram1.NumMiliSec:=StrToInt(Edit16.Text);

except MessageDlg('Число повинне бути цілим та додатнім!!!',mtError,[mbOk],0); end

end;

procedure TForm1.GeneratorOptionClick(Sender: TObject);

begin

Form4.showmodal;

end;

end.

Текст компонента GraphicDiagram

unit GraphicDiagram;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

const WM_MYMessage = WM_USER+1000;

const MAX_COUNT = 10000;

type

TTypeDiagram = (tdLine,tdColumn,tdUser);

TPoint = ^Longint;

TPointArray = TList;

TCount = 0..MAX_COUNT;

TnewMouseMoveEvent = procedure (Sender:TObject;Shift:TShiftState;x,y:integer;

var DoDefault:boolean) of Object;

TGraphicDiagram = class(TGraphicControl)

private

FTypeDiagram:TTypeDiagram;

FpointStart:Longint;//початок відображення точок на графіку

FPointDrawCount:Longint; //Кінець відображення точок на графіку

FNumSeccond,FNumMSeccond:word; // кількість мілісекунд, після яких добавляється точка

FPointYMax:Longint; //максимальна точка по Ігрик

FDrawX:Boolean;

FDrawY:Boolean;

FDRAWColor:TColor;

FDrawGridX:Boolean;

FDrawGridY:Boolean;

FDrawGridColor:TColor;

FPointsValue:TPointArray; // тільки додатні елементи

FDataStart,FDataStop:TDateTime;//початок відображення точок на графіку

FEnabled:Boolean;

FOnMouseMove:TnewMouseMoveEvent;

OurTime:longint;

MashtabX:real;

MashtabY:real;

FMashTab:Boolean; //маштаб якщо він змінився то true

// function GetValue(index:Longint): Longint; //читає точку

Procedure SetValue(index,value:Longint); //добавляє точку

procedure SetTypeDiagram(typeD:TTypeDiagram);

procedure SetMashtabX;

procedure SetMashtabY;

protected

procedure paint;override;

procedure WritePoints(stream:TStream);virtual;

procedure ReadPoints(stream:TStream);virtual;

procedure DefineProperties(Filer:TFiler);override;

procedure WMMouseMove(var Mes:TWMMouse); message WM_MOUSEMOVE;

procedure MyMouseMove(Shift:TShiftState;x,y:integer);dynamic;

Procedure WMMyMessage(var Mes:TMessage); message WM_MyMessage;

public

{ Public declarations }

constructor create(AOwner:TComponent);override;

destructor Destroy; override;

procedure AddValue(value:TPoint);overload;

function GetPointsCount:Longint; //читає точку

function getList:TPointArray;

function SaveData(filename:String):integer;

function LoadData(filename:String):integer;

function SavePicture(filename:String):integer;

procedure Start;

procedure Stop;

procedure Clear;

procedure Resize(Sender:TControl);

function GetValue(index:Longint): Longint; //читає точку

// procedure AddValue(value:longint);overload;

published

{ Published declarations }

property TypeDiagram:TTypeDiagram read FTypeDiagram write FTypeDiagram;

property DrawCount:integer read FPointDrawCount Write FPointDrawCount;

property DrawX:Boolean read FDrawX Write FDrawX;

property DrawY:Boolean read FDrawY Write FDrawY;

property DrawGridX:Boolean read FDrawGridX Write FDrawGridX;

property DrawGridY:Boolean read FDrawGridY Write FDrawGridY;

property DrawColor:TColor read FDrawColor Write FDrawColor;

property DrawGridColor:TColor read FDrawGridColor Write FDrawGridColor;

property DrawStart:integer read FPointStart Write FPointStart;

property NumSeccondShow:word read FNumSeccond write FNumSeccond stored false;

property NumMiliSec:word read FNumMSeccond write FNumMSeccond stored false;

property OnMouseMove:TnewMouseMoveEvent read FOnMouseMove write FOnMouseMove;

end;

procedure Register;

implementation

procedure TGraphicDiagram.Resize;

begin

Height:=Sender.Height-30;

Width:=Sender.Width-15;

invalidate;

end;

function TGraphicDiagram.getList:TPointArray;

begin

result:=FPointsValue;

end;

procedure TGraphicDiagram.Start;

begin

FDataStart:=now;

end;

procedure TGraphicDiagram.Stop;

begin

FDataStop:=now;

end;

destructor TGraphicDiagram.destroy;

begin

Self.clear;

inherited;

end;

procedure TGraphicDiagram.Clear;

var l:^Longint;

i:TPoint;

n:Longint;

begin

n:=FPointsValue.Count-1;

FPointsValue.clear;

FpointStart:=0;

new (i);

i^:=0;

AddValue(i);

invalidate;

end;

function TGraphicDiagram.LoadData;

var i:Longint;

n:^Longint;

f:textFile;

st:String;

begin

result:=-1;

FpointsValue.Clear;

FpointStart:=0;

if not FileExists(filename) then exit;

assignFile(f,filename);

reset(f);

while not eof(f) do

begin

readln(f,st);

i:=pos('|',st);

if i=0 then Exception.create('Неправильний формат файлу '+filename);

FDataStart:=StrToDateTime(copy(st,1,i-1));

new (n);

n^:= StrToInt(copy(st,i+1,10));

FpointsValue.add(n);

end;

closeFile(f);

invalidate;

result:=0;

end;

function TGraphicDiagram.SavePicture;

var tp:TBitMap;

st:TStream;

p:pointer;

rin:TRect;

begin

rin:=Rect(0,0,width,height);

//TCanvas

tp:= TBitmap.Create;

// p:=addr(self.canvas.pixels[0,0])

tp.width:=width;

tp.height:=height;

tp.canvas.CopyRect (rin, self.canvas,rin);

tp.SaveToFile (filename);

tp.free;

end;

function TGraphicDiagram.SaveData;

var i:Longint;

n:^Longint;

f:textFile;

begin

result:=-1;

assignFile(f,filename);

rewrite(f);

for i:=0 to FPointsValue.count-1 do

begin

n:=FpointsValue.items[i];

writeln(f,DateTimeToStr(FDataStart+(FDataStart-FDataStop)/FPointsValue.count),'|',n^);

end;

closeFile(f);

result:=0;

end;

function TGraphicDiagram.GetPointsCount:Longint; //

begin

result:=FPointsValue.Count;

end;

procedure TGraphicDiagram.SetTypeDiagram(typeD:TTypeDiagram);

begin

FTypeDiagram:=typeD;

invalidate;

end;

procedure TGraphicDiagram.WMMouseMove(var Mes:TWMMouse);

begin

inherited;

if not (csNoStdEvents in ControlStyle) then

with mes do MyMouseMove (KeysToShiftState(Keys),Xpos,YPos);

end;

procedure TGraphicDiagram.MyMouseMove(Shift:TShiftState;x,y:integer);

var def:Boolean;

begin

def:=true;

if Assigned(FOnMouseMove) then FOnMouseMove(Self,shift,x,y,def);

{if def then оброблювач по замовчуванню!!!}

end;

procedure TGraphicDiagram.WMMyMessage(var Mes:TMessage);

begin

Canvas.Pen.Color:= clRed;

inValidate;

end;

procedure TGraphicDiagram.DefineProperties(Filer:TFiler);

begin

inherited DefineProperties(Filer);

// Filer.DefineBinaryProperty('TypeDiagram',ReadType,WritePoints,true);

end;

procedure TGraphicDiagram.WritePoints(stream:TStream);

begin

// stream.WriteBuffer(FPointsValue,SizeOf(FPointsVAlue));

end;

procedure TGraphicDiagram.ReadPoints(stream:TStream);

begin

// stream.ReadBuffer(FPointsValue,SizeOf(FPointsVAlue));

end;

constructor TGraphicDiagram.create;

var i:integer;

n:TPoint;

begin

inherited create (AOwner);

FDrawColor:=clBlack;

FDrawGridColor:=clBlack;

FDrawX:=true;

FDrawY:=true;

FDrawGridX:=true;

FDrawGridY:=true;

FPointYMax:=1;

Height:=100;

Width:=200;

FNumSeccond:=20;

FNumMSeccond:=200;

FPointDrawCount:=(FNumSeccond*1000) div FNumMSeccond;

MashtabX:=Width/FPointDrawCount;

MashtabY:=(Height-30);

FTypeDiagram:= tdColumn;

FPointsValue:=TList.Create;

new (n);

n^:=0;

addValue(n);

FEnabled:=true;

FMashTab:=true; //маштаб по Ігрику

end;

function TGraphicDiagram.getValue;

begin

if index<FPointsValue.count then

Result:=Longint(FPointsValue.items[index])

else result:=0;

end;

procedure TGraphicDiagram.setValue;

var l:^Longint;

begin

if index<FPointsValue.count then

begin

l:=FPointsValue.Items[index];

if l<>nil then dispose(l);

FPointsValue.Items[index]:=@value;

if value>FPointYMax then begin

FPointYMax:=Value;

FMashtab:=true;

end;

invalidate;

end;

end;

procedure TGraphicDiagram.AddValue(value:TPoint);

var

knum:Longint;

begin

FPointsValue.Add(value);

knum:=FPointsValue.Count;

if ((knum-FPointStart)+3>FPointDrawCount) then FPointStart:=knum-FPointDrawCount+3;

if value^>FPointYMax then begin

FPointYMax:=Value^;

FMashtab:=true;

end;

invalidate;

end;

//Встановлення маштабу по Y

procedure TGraphicDiagram.SetMashtabY;

begin

try

MashtabY:=(Height-30)/FPointYMax;

except MashtabY:=(Height-30)/10 end;

end;

//Встановлення маштабу по X

procedure TGraphicDiagram.SetMashtabX;

begin

MashtabX:=(width-10)/FPointDrawCount;

end;

procedure TGraphicDiagram.paint;

var i:longint;

//Отримання координати Х точки у відповідності до маштабу по Х

function GetX(p:longint):integer;

begin

result:=10 + Round(p*MashtabX);

end;

//Отримання координати Y точки у відповідності до маштабу по Y

function GetY(p:longint):integer;

begin

result:=Height -10 - Round(p*MashtabY);

end;

procedure drawKoordinate;

var i:integer;

temp:TColor;

begin

with canvas do

begin

//Відобрахкння координатних осей

pen.Width:=2;

temp:=pen.Color;

pen.Color:=FDrawColor;

//Вісь Х

if FDrawX then begin

moveTo(10,height-10);

lineTo(width-5,height-10);

moveTo(width-5,height-10);

lineTo(width-15,height-15);

moveTo(width-5,height-10);

lineTo(width-15,height-5);

//Поділки на вісі Х

for i:=0 to 9 do

begin

moveTo(10+(width) div 10 *i,height-5);

lineTo(10+(width) div 10 *i,height-15);

end;

end;

//Вісь Y

if FDrawY then begin

moveTo(10,height-10);

lineTo(10,5);

moveTo(10,5);

lineTo(5,15);

moveTo(10,5);

lineTo(15,15);

//Поділки на вісі Y

for i:=0 to 9 do

begin

moveTo(5,height-10- height div 10*i);

lineTo(15,height-10- height div 10*i);

end;

end;

moveTo(10,height-10);

pen.Width:=1;

pen.Style:=psDot;

pen.Color:=FDrawGridColor;

//Відображення координатної сітки

if FDrawGridX then

begin

//Сітка по вісі Х

for i:=0 to 9 do

begin

moveTo(10+(width) div 10 *i,height-5);

lineTo(10+(width) div 10 *i,0);

end;

end;

if FDrawGridY then begin

//Сітка по вісі Y

for i:=0 to 9 do

begin

moveTo(5,height-10- height div 10*i);

lineTo(width,height-10- height div 10*i);

end;

end;

moveTo(10,height-10);

pen.style:=psSolid;

pen.Color:=temp;

end;

end;

var l:longint;

p:^Longint;

rx:longint;

ry:longint;

begin

if FMashtab then

begin

SetMashtabX;

SetMashtabY;

end;

if csDesigning in ComponentState then

inherited Canvas.pen.Style:= psDash

else

inherited Canvas.pen.Style:= psSolid;

l:=FPointsValue.Count-1;

with inherited Canvas do

begin

Brush.Style:=bsClear;

// Rectangle(0,0,Width,Height);

p:=FPointsValue.items[FPointStart];

moveTo(0,GetY(p^));

pen.Style:= psSolid;

pen.color:=clBlack;

DrawKoordinate;

if FTypeDiagram=tdLine then

for i:=FPointStart to l do

begin

p:=FPointsValue.items[i];

rx:=GetX(i-FPointStart);

ry:=GetY(p^);

LineTo(rx,ry)

end

else if FTypeDiagram=tdColumn then begin

Brush.Style:= bsSolid;

Brush.Color:= clBlue;

for i:=FPointStart to l do

begin

p:=FPointsValue.items[i];

rx:=GetX(i-FPointStart);

ry:=GetY(p^);

FillRect(Rect(rx,Height-10,rx+1,ry));

end;

end;

end;

end;

procedure Register;

begin

RegisterComponents('ActiveX', [TGraphicDiagram]);

end;

end.

Текст модуля Unit3

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, StdCtrls, Buttons, ExtCtrls;

type

TForm3 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

GroupBox1: TGroupBox;

RBX: TRadioButton;

RBY: TRadioButton;

RbXY: TRadioButton;

RBNone: TRadioButton;

GroupBox2: TGroupBox;

RBGX: TRadioButton;

RBGY: TRadioButton;

RBGXY: TRadioButton;

RBGNone: TRadioButton;

ColorBox1: TColorBox;

ColorBox2: TColorBox;

procedure FormShow(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses MainForm;

{$R *.dfm}

procedure TForm3.FormShow(Sender: TObject);

begin

with Form1 do

if GraphicDiagram1.DrawX and GraphicDiagram1.DrawY then RBXY.Checked:=true else

if GraphicDiagram1.DrawX then RBX.Checked:=true else

if GraphicDiagram1.DrawY then RBY.Checked:=true else

RBNONe.Checked:=true;

end;

procedure TForm3.BitBtn1Click(Sender: TObject);

begin

with Form1 do begin

//Перевірка для осей координат

if RBXY.Checked then begin GraphicDiagram1.DrawX:=true; GraphicDiagram1.DrawY:=true;end;

if RBY.Checked then begin GraphicDiagram1.DrawX:=false; GraphicDiagram1.DrawY:=true;end;

if RBX.Checked then begin GraphicDiagram1.DrawX:=true; GraphicDiagram1.DrawY:=false;end;

if RBNone.Checked then begin GraphicDiagram1.DrawX:=false; GraphicDiagram1.DrawY:=false;end;

//Перевірка для сітки

if RBGXY.Checked then begin GraphicDiagram1.DrawGridX:=true; GraphicDiagram1.DrawGridY:=true;end;

if RBGY.Checked then begin GraphicDiagram1.DrawGridX:=false; GraphicDiagram1.DrawGridY:=true;end;

if RBGX.Checked then begin GraphicDiagram1.DrawGridX:=true; GraphicDiagram1.DrawGridY:=false;end;

if RBGNone.Checked then begin GraphicDiagram1.DrawGridX:=false; GraphicDiagram1.DrawGridY:=false;end;

GraphicDiagram1.DrawColor:=ColorBox2.Selected;

GraphicDiagram1.DrawGridColor:=ColorBox1.Selected;

GraphicDiagram1.Invalidate;

end;

end;

end.


Информация о работе «Візуальний облік вхідних даних інтерфейсу RS-232»
Раздел: Информатика, программирование
Количество знаков с пробелами: 70440
Количество таблиц: 0
Количество изображений: 5

Похожие работы

Скачать
182729
21
21

... Висновки по розділу 3 У даному розділі диплома була розроблена автоматизована інформаційна система розрахунку прибутку на гірничо-збагачувальному підприємстві. Дана система була розроблена для підвищення ефективності роботи підприємства. В основу алгоритмів обробки даних покладені методи математичної статистики й оптимізаційні моделі. Для проектування і реалізації автоматизованої інформаційної ...

Скачать
162235
26
50

... ./ “_____”_________2009р. Виконавець Студент групи x  /xxxxxx./ “_____”____________2009р. Харків 2009 ЗАТВЕРДЖЕНО xxx.03077-01 12 01-1-ЛЗ ВІРТУАЛЬНИЙ ВИМІРЮВАЛЬНИЙ КОМПЛЕКС НА БАЗІ УЧБОВОГО ЛАБОРАТОРНОГО СТЕНДУ EV8031 Текст програми xxxxx.03077-01 12 01-1 Аркушів _48_ Харків 2009 ЗМІСТ 1 ТЕКСТ ПРОГРАМНОГО ЗАБЕСПЕЧЕННЯ ...

Скачать
192829
34
16

... альної відповідальності відповідно до закону. 5.2 Оцінка умов, в яких проводилася дипломна робота Дипломна робота на тему “Підвищення ефективності інноваційної діяльності в умовах ВАТ “Дніпропетровський лакофарбовий завод ім. Ломоносова”” виконувалася у відділі цін та економічного аналізу ВАТ «ДЛФЗ». Дана робота розроблялась з використанням персональної електроно-обчислювальної машини (ПЕОМ ...

Скачать
155152
18
31

... і над плановим. Відомо, що собівартість є одним з головних джерел резервів підвищення ефективності роботи підприємства. Звідси сформуємо мету і задачі даної роботи. Метою даної роботи є підвищення ефективності роботи підприємства ВАТ «Дніпрополімермаш» шляхом управління собівартістю продукції. Відповідно, для досягнення поставленої мети необхідно вирішити наступні задачі: 1.   Проаналізувати ...

0 комментариев


Наверх