оформление (1017078), страница 4
Текст из файла (страница 4)
if Reo1.B[2,m]>=PorogM
then
if Reo1.B[2,m+1]<PorogM
then
begin
r2:=m;
Mx:=r1;
My:=Reo1.B[2,r1];
for r:=r1 to r2 do
if Reo1.B[2,r]>My
then begin My:=Reo1.B[2,r]; Mx:=r; end;
ARR[a]:=Mx; a:=a+1; ////заполнение массива координатами точек максимума дифференцированной реограммы по оси Х (это нужно для нахождения точек выброса крови из левого жедудочка)
Image1.Canvas.MoveTo(II(Mx),JJ(My+h2,0,h1)+5);
Image1.Canvas.LineTo(II(Mx),JJ(My+h2,0,h1)-4);
Break;
end;
end;
end;
end;
////Нахождение точек выбрасывания крови из левого желудочка сердца
procedure TForm1.GelZ;
var
b,c,Px,Py,t:integer;
Max:real;
begin
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.Pen.Color:=clRed;
Px:=1;
Py:=1;
for b:=1 to 80 do
if ARR[b]<ARR[b+1]
then
begin
Max:=0.00001;
for c:=ARR[b] to ARR[b+1] do
begin
if (Reo1.B[2,c+1]-Reo1.B[2,c-1])/2>Max
then
begin
Max:=(Reo1.B[2,c+1]-Reo1.B[2,c-1])/2;
Px:=c;
Py:=Reo1.B[2,c];
end;
end;
t:=Round(Px-Py/Max);
Image1.Canvas.MoveTo(II(t),JJ(Reo1.B[2,t]+h2,0,h1)+20);
Image1.Canvas.LineTo(II(t),JJ(Reo1.B[2,t]+h2,0,h1)-6);
end
else Break;
end;
////процедура при нажатии на кнопку Разместить
procedure TForm1.Action3Execute(Sender: TObject);
begin
MaxR;
MaxM;
GelZ;
end;
////функция получения высотры страницы в пикселях
function HeightY: Integer;
begin
Result:=GetDeviceCaps(Printer.Canvas.Handle, VertRes)
end;
////функция получения ширины страницы в пикселях
function WidthX: Integer;
begin
Result:=GetDeviceCaps(Printer.Canvas.Handle, HorzRes)
end;
////функция преобразования координат с бумаги по оси Х
function PrinterCoordX(x:integer):integer;
begin
Result:=round(GetDeviceCaps(printer.Handle,LogPixelsX)/25.4*x);
end;
////функция преобразования координат с бумаги по оси Y
function PrinterCoordY(Y:integer):integer;
begin
Result:=round(GetDeviceCaps(printer.Handle,LogPixelsY)/25.4*Y);
end;
////печать графиков
procedure TForm1.PrintGrafik;
var
j:integer;
begin
I1:=0;
I2:=Round(WidthX);
J1:=0;
J2:=Round(HeightY/2);
Printer.Canvas.MoveTo(II(1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[1,1],0,h1));
for j:=1 to 1000 do
begin
Printer.Canvas.LineTo(II(j+1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[1,j+1],0,h1));
end;
Printer.Canvas.MoveTo(II(1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[2,1]+h2,0,h1)+5);
for j:=1 to 1000 do
begin
Printer.Canvas.LineTo(II(j+1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[2,j+1]+h2,0,h1)+5);
end;
Printer.Canvas.MoveTo(II(1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[3,1]+h3,0,h1)+5);
for j:=1 to 1000 do
begin
Printer.Canvas.LineTo(II(j+1),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[3,j+1]+h3,0,h1)+5);
end;
end;
////печать R-зубцов
procedure TForm1.PrintR;
var
j,Rx,Ry,p,p1,p2,k:integer;
begin
Printer.Canvas.Brush.Style:=bsClear;
I1:=0;
I2:=Round(WidthX);
J1:=0;
J2:=Round(HeightY/2);
for j:=1 to 1000 do
if Reo1.B[1,j]<PorogR
then
begin
if PorogR<Reo1.B[1,j+1]
then
begin
p1:=j+1;
for k:=p1 to 1000 do
if Reo1.B[1,k]>PorogR
then
if Reo1.B[1,k+1]<PorogR
then
begin
p2:=k;
Rx:=p1;
Ry:=Reo1.B[1,p1];
for p:=p1 to p2 do
if Reo1.B[1,p]>Ry
then begin Ry:=Reo1.B[1,p]; Rx:=p; end;
Printer.Canvas.MoveTo(II(Rx),PrinterCoordY(10+9*Font.Size)+JJ(Ry,0,h1)-20);
Printer.Canvas.LineTo(II(Rx),PrinterCoordY(10+9*Font.Size)+JJ(Ry,0,h1)+30);
end;
end;
end;
end;
////печать точек выброса крови из левого желудочка
procedure TForm1.PrintZ;
var
b,c,Px,Py,t:integer;
Max:real;
begin
Printer.Canvas.Brush.Style:=bsClear;
I1:=0;
I2:=Round(WidthX);
J1:=0;
J2:=Round(HeightY/2);
Px:=1;
Py:=1;
for b:=1 to 80 do
if ARR[b]<ARR[b+1]
then
begin
Max:=1;
for c:=ARR[b] to ARR[b+1] do
begin
if (Reo1.B[2,c+1]-Reo1.B[2,c-1])/2>Max
then
begin
Max:=(Reo1.B[2,c+1]-Reo1.B[2,c-1])/2;
Px:=c;
Py:=Reo1.B[2,c];
end;
end;
t:=Round(Px-Py/Max);
Printer.Canvas.MoveTo(II(t),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[2,t]+h2,0,h1)-40);
Printer.Canvas.LineTo(II(t),PrinterCoordY(10+9*Font.Size)+JJ(Reo1.B[2,t]+h2,0,h1)+40);
end
else Break;
end;
////печать максимумов дифференцированной реограммы
procedure TForm1.PrintM;
var
a,i,Mx,My,r,r1,r2,m:integer;
begin
Printer.Canvas.Brush.Style:=bsClear;
I1:=0;
I2:=Round(WidthX);
J1:=0;
J2:=Round(HeightY/2);
ARR[1]:=1;
a:=2;
for i:=1 to 1000 do
if Reo1.B[2,i]<PorogM
then
begin
if PorogM<=Reo1.B[2,i+1]
then
begin
r1:=i+1;
for m:=r1 to 1000 do
if Reo1.B[2,m]>=PorogM
then
if Reo1.B[2,m+1]<PorogM
then
begin
r2:=m;
Mx:=r1;
My:=Reo1.B[2,r1];
for r:=r1 to r2 do
if Reo1.B[2,r]>My
then begin My:=Reo1.B[2,r]; Mx:=r; end;
ARR[a]:=Mx; a:=a+1;
Printer.Canvas.MoveTo(II(Mx),PrinterCoordY(10+9*Font.Size)+JJ(My+h2,0,h1)-20);
Printer.Canvas.LineTo(II(Mx),PrinterCoordY(10+9*Font.Size)+JJ(My+h2,0,h1)+30);
Break;
end;
end;
end;
end;
////процедура при нажатии на кнопку Печать
procedure TForm1.Action4Execute(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10),Label1.Caption+' '+Edit1.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(Font.Size/2)),Label2.Caption+' '+Edit2.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(2*Font.Size/2)),Label3.Caption+' '+Edit3.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(3*Font.Size/2)),Label4.Caption+' '+Edit4.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(4*Font.Size/2)),Label5.Caption+' '+Edit5.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(5*Font.Size/2)),Label6.Caption+' '+Edit6.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(6*Font.Size/2)),Label7.Caption+' '+Edit7.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(7*Font.Size/2)),Label8.Caption+' '+Edit8.Text);
Printer.Canvas.TextOut(PrinterCoordX(10), PrinterCoordY(10+Round(8*Font.Size/2)),Label9.Caption+' '+Edit9.Text);
PrintGrafik;
PrintR;
PrintM;
PrintZ;
Printer.EndDoc;
end;
end.
Приложение Б. Вывод информации на печать.
Список литературы
-
Цегельникова А.Л. Методические указания по выполнению лабораторных работ. Реография. Обработка сигнала и расчёт гемодинамических показателей в системе Delphi. – M.:МИРЭА, 2004. – 20с.
-
http://lainslav.narod.ru/ - Медицина – Реография.