const NUM_SHAPES = 200; StartX = 80; // 80; // начальные координаты по X StartY = 505; // 580; // начальные координаты по Y year = 12; var LF: TLogFont; FNew, FOld: HFont; i, x, year_x: Integer; p1, p2, p3, p4: Tpoint; begin Canvas.Pen.Style := psSolid; // фон Canvas.Brush.Color := RGB(255, 255, 255); Canvas.Rectangle(Rect); // деления по оси Х year_x := year * zoom; x := 0; x := x + year_x; i := 1; while i < 8 do begin Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX + x, StartY - 10); Canvas.LineTo(StartX + x, StartY + 10); Canvas.Font.Size := 10; Canvas.TextOut(StartX + x, StartY + 10, IntToStr(i)); x := x + year_x; inc(i); end; // деления по оси Y x := 0; i := 0; year_x := year * zoom; while i < 7 do begin Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX - 10, StartY - x); Canvas.LineTo(StartX + 10, StartY - x); Canvas.Font.Size := 10; Canvas.TextOut(StartX - 20, StartY - x - 5, IntToStr(i)); x := x + year_x; inc(i); end; // ось Х Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX, StartY); Canvas.LineTo(StartX + S_k * 2, StartY); // подпись оси X Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_k * 2 - 50, StartY - P_is div 2, 'Остаток до конца срока службы по паспорту'); Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_k * 2, StartY + P_is div 5, 'S'); // ИСК p1.x := StartX; p1.Y := StartY; p2.x := StartX; p2.Y := StartY - P_is; p3.x := StartX + S_is; p3.Y := StartY - P_is; p4.x := StartX + S_is; p4.Y := StartY; Canvas.Brush.Style := bsBDiagonal; Canvas.Brush.Color := clBlack; Canvas.Polygon([p1, p2, p3, p4]); // текст ИКС Canvas.Font.Size := 10; Canvas.TextOut(StartX + S_is div 4, StartY - P_is div 2, 'ИСК'); // ось Y Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX, StartY); Canvas.LineTo(StartX, StartY - P_k - P_k div 2-25); // подпись оси Y Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_is div 4,StartY - P_k - P_k div 2-30, 'Остаток до конца полуторного срока службы от даты постройки'); Canvas.Font.Size := 11; Canvas.Font.Size := 12; Canvas.TextOut(StartX - 35, StartY - P_k - P_k div 2-35, 'P'); // P_is Canvas.Font.Size := 10; Canvas.TextOut(StartX - (S_p - S_is) - 20, StartY - P_is, 'Pис'); // S_is Canvas.Font.Size := 10; Canvas.TextOut(StartX + S_is, StartY + P_is div 5 + 15, 'Sис'); // S_p Canvas.Font.Size := 10; Canvas.TextOut(StartX + S_p, StartY + P_is div 5 + 15, 'Sп'); // ДР на 110 p1.x := StartX + S_is; p1.Y := StartY; p2.x := StartX + S_is; p2.Y := StartY - P_is - (Delta_S div 2); p3.x := StartX + S_p; p3.Y := StartY - P_is - Delta_S; p4.x := StartX + S_p; p4.Y := StartY; Canvas.Brush.Style := bsFDiagonal; Canvas.Brush.Color := clRed; Canvas.Polygon([p1, p2, p3, p4]); // Линия S_k Canvas.Pen.Color := RGB(102, 204, 102); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_k, StartY); Canvas.LineTo(StartX + S_k, StartY - P_k); Canvas.Font.Size := 10; Canvas.TextOut(StartX + S_k, StartY + P_is div 5 + 15, 'Sk'); // Линия P_k Canvas.Pen.Color := RGB(0, 153, 255); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX, StartY - P_k); Canvas.LineTo(StartX + S_k, StartY - P_k); Canvas.Font.Size := 10; Canvas.TextOut(StartX - (S_p - S_is) - 20, StartY - P_k, 'Pk'); // Линия ДР_нижняя Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX + S_p, StartY - P_is); Canvas.LineTo(StartX + S_k, StartY - P_is); // ДР на 110 бок_правый Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_p, StartY); Canvas.LineTo(StartX + S_p, StartY - P_is - Delta_S); // ДР на 110 бок_левый Canvas.Pen.Style := psSolid; Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_is, StartY - P_is); Canvas.LineTo(StartX + S_is, StartY - P_is - (Delta_S div 2)); // ДР на 110 крышка_диагональ Canvas.Pen.Style := psSolid; Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_is, StartY - P_is - (Delta_S div 2)); Canvas.LineTo(StartX + S_p, StartY - P_is - Delta_S); // ИСК крышка Canvas.Pen.Color := RGB(255, 102, 51); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX, StartY - P_is); Canvas.LineTo(StartX + S_is, StartY - P_is); // ИСК бок_правый Canvas.Pen.Color := RGB(102, 0, 153); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_is, StartY); Canvas.LineTo(StartX + S_is, StartY - P_is); // ДР низ Canvas.Pen.Color := RGB(255, 102, 51); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_p, StartY - P_is); Canvas.LineTo(StartX + S_k, StartY - P_is); // ДРП бок_правый Canvas.Pen.Color := RGB(255, 255, 51); Canvas.Pen.Width := 3; Canvas.MoveTo(StartX + S_p, StartY - P_is - Delta_S); Canvas.LineTo(StartX + S_p, StartY - P_k); // диагональная пунктиром Canvas.Pen.Width := 1; Canvas.Pen.Style := psDashDot; Canvas.Pen.Color := RGB(0, 0, 0); Canvas.MoveTo(StartX, StartY); Canvas.LineTo(StartX + S_k, StartY - P_k); // текст ДРП Canvas.Font.Size := 16; Canvas.TextOut(StartX + S_p div 5, StartY - P_is - ((P_k - P_is) - P_is div 2), 'ДРП'); // текст ДР Canvas.Font.Size := 16; Canvas.TextOut(StartX + S_p + ((S_k - S_p) div 2), StartY - P_is - ((P_k - P_is) div 2), 'ДР'); // текст ДР на 110 нижний под 90 градусов // Сохраняем хендл шрифта канвы FOld := Canvas.Font.Handle; // обнуляем поля структуры параметров нового шрифта FillChar(LF, SizeOf(LF), 0); // назначаем параметры нового шрифта LF.lfHeight := 14; // размер LF.lfWeight := fw_Normal; LF.lfEscapement := 900; // угол поворота в десятых долях градуса StrPCopy(LF.lfFaceName, 'Times New Roman'); // создаем шрифт на основе заданных параметров FNew := CreateFontIndirect(LF); // назначаем его для канвы Canvas.Font.Handle := FNew; // выводим текст Canvas.TextOut(StartX + S_is + ((S_p - S_is) div 4), StartY - P_is div 4, 'ДР на 110'); // убиваем шрифт, если больше не нужен DeleteObject(FNew); // назначаем первоначальный шрифт для канвы Canvas.Font.Handle := FOld; // ДР и КР по 707 распоряжению Canvas.Font.Size := 16; Canvas.TextOut(StartX + S_k + S_p, StartY - P_is - ((P_k - P_is) div 2), 'ДР и КР'); Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_k + S_p, StartY - P_is - ((P_k - P_is) div 2 - 30), 'по 707 распоряжению'); // текст делта S FOld := Canvas.Font.Handle; FillChar(LF, SizeOf(LF), 0); LF.lfHeight := 14; LF.lfWeight := fw_Normal; LF.lfEscapement := 0; StrPCopy(LF.lfFaceName, 'Symbol'); FNew := CreateFontIndirect(LF); Canvas.Font.Handle := FNew; Canvas.TextOut(StartX + S_p + S_is div 5, StartY - P_is - Delta_S div 2 - 10, #68); DeleteObject(FNew); Canvas.Font.Handle := FOld; FOld := Canvas.Font.Handle; FillChar(LF, SizeOf(LF), 0); LF.lfHeight := 14; LF.lfWeight := fw_Normal; LF.lfEscapement := 0; StrPCopy(LF.lfFaceName, 'Times New Roman'); FNew := CreateFontIndirect(LF); Canvas.Font.Handle := FNew; Canvas.TextOut(StartX + S_p + S_is div 5 + 10, StartY - P_is - Delta_S div 2 - 10, 'S'); DeleteObject(FNew); Canvas.Font.Handle := FOld; // ДРП или КРП по 707 Canvas.Font.Size := 16; Canvas.TextOut(StartX + S_p div 4, StartY - P_k - 85, 'ДРП'); Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_p div 4+5, StartY - P_k - 65, 'или'); Canvas.Font.Size := 16; Canvas.TextOut(StartX + S_p div 4, StartY - P_k - 45, 'КРП'); Canvas.Font.Size := 11; Canvas.TextOut(StartX + S_p div 4+5, StartY - P_k - 25, 'по 707'); // подпись схемы Canvas.Font.Size := 14; Canvas.TextOut(Rect.Right - Rect.Right div 3, Rect.Top + 20, 'Схема определения вида ремонта'); // пунктиры ДР на 110 верхний Canvas.Pen.Style := psDot; Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX + S_p, StartY - P_is - Delta_S); Canvas.LineTo(StartX - 10, StartY - P_is - Delta_S); // пунктиры ДР на 110 нижний Canvas.Pen.Style := psDot; Canvas.Pen.Color := RGB(0, 0, 0); Canvas.Pen.Width := 1; Canvas.MoveTo(StartX + S_is, StartY - P_is - (Delta_S div 2)); Canvas.LineTo(StartX, StartY - P_is - (Delta_S div 2)); // треугольник на оси X p1.x := StartX + S_k * 2; p1.Y := StartY + 5; p3.x := StartX + S_k * 2 + 10; p3.Y := StartY; p2.x := StartX + S_k * 2; p2.Y := StartY - 5; Canvas.Pen.Style := psSolid; Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := clBlack; Canvas.Polygon([p1, p2, p3]); // треугольник на оси Y p1.x := StartX - 5; p1.Y := StartY - P_k - P_k div 2-25; p3.x := StartX; p3.Y := StartY - P_k - P_k div 2-35;// - 10; p2.x := StartX + 5; p2.Y := StartY - P_k - P_k div 2-25; Canvas.Pen.Style := psSolid; Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := clBlack; Canvas.Polygon([p1, p2, p3]);