Исправить прогу ОСиСП и пояснить листинг по АКГ
- Войдите на сайт для отправки комментариев
Исправить прогу ОСиСП графический редактор (самый приметивный) Нужно в нем исправить: после сохранения файла до закрытия програмы нельзя удалить файл. (прога использует его все ровно)
Пояснить листинг по АКГ
Пример листинга:
Листинг:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TPoint = record
X: integer;
Y: integer;
end;
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
RadioGroup1: TRadioGroup;
Bevel1: TBevel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PaintImg(Color: TColor);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
P11,P12,P13,P14,P15: TPoint; // Многоугольник 1
P21,P22,P23,P24,P25: TPoint; // Многоугольник 2 (точка P23 совпадает с P22)
P31,P32,P33,P34,P35: TPoint; // Точки на перегородке
P41,P42,P43,P44,P45: TPoint; // Точки текущего положения фигуры
implementation
{$R *.dfm}
// Кнопка "Старт"
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
Button1.Enabled:=False;
Image1.Picture.Assign(nil);
P41.X:=P11.X; P42.X:=P12.X; P43.X:=P13.X; P44.X:=P14.X; P45.X:=P15.X;
P41.Y:=P11.Y; P42.Y:=P12.Y; P43.Y:=P13.Y; P44.Y:=P14.Y; P45.Y:=P15.Y;
PaintImg(clBlack); // Исходная фигура
// До перегородки
for i:=1 to 15 do
begin
Sleep(100); Application.ProcessMessages;
if RadioGroup1.ItemIndex=1 then PaintImg(clWhite);
P41.X:=Round(P11.X+(P31.X-P11.X)*i/15); P41.Y:=Round(P11.Y+(P31.Y-P11.Y)*i/15);
P42.X:=Round(P12.X+(P32.X-P12.X)*i/15); P42.Y:=Round(P12.Y+(P32.Y-P12.Y)*i/15);
P43.X:=Round(P13.X+(P33.X-P13.X)*i/15); P43.Y:=Round(P13.Y+(P33.Y-P13.Y)*i/15);
P44.X:=Round(P14.X+(P34.X-P14.X)*i/15); P44.Y:=Round(P14.Y+(P34.Y-P14.Y)*i/15);
P45.X:=Round(P15.X+(P35.X-P15.X)*i/15); P45.Y:=Round(P15.Y+(P35.Y-P15.Y)*i/15);
PaintImg(clBlack);
end;
// После перегородки
for i:=14 downto 0 do
begin
Sleep(100); Application.ProcessMessages;
if RadioGroup1.ItemIndex=1 then PaintImg(clWhite);
P41.X:=Round(P21.X-(P21.X-P31.X)*i/15); P41.Y:=Round(P21.Y-(P21.Y-P31.Y)*i/15);
P42.X:=Round(P22.X-(P22.X-P32.X)*i/15); P42.Y:=Round(P22.Y-(P22.Y-P32.Y)*i/15);
P43.X:=Round(P23.X-(P23.X-P33.X)*i/15); P43.Y:=Round(P23.Y-(P23.Y-P33.Y)*i/15);
P44.X:=Round(P24.X-(P24.X-P34.X)*i/15); P44.Y:=Round(P24.Y-(P24.Y-P34.Y)*i/15);
P45.X:=Round(P25.X-(P25.X-P35.X)*i/15); P45.Y:=Round(P25.Y-(P25.Y-P35.Y)*i/15);
PaintImg(clBlack);
end;
Sleep(100); Application.ProcessMessages;
Button1.Enabled:=True;
end;
// Исходные данные
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Assign(nil); Image1.Canvas.MoveTo(0,0);
// Многоугольник 1
P11.X:=100; P12.X:=200; P13.X:=210; P14.X:=80; P15.X:=20;
P11.Y:=20; P12.Y:=120; P13.Y:=220; P14.Y:=300; P15.Y:=180;
// Многоугольник 2
P21.X:=800; P22.X:=920; P23.X:=P22.X; P24.X:=750; P25.X:=700;
P21.Y:=320; P22.Y:=390; P23.Y:=P22.Y; P24.Y:=530; P25.Y:=470;
// Точки на перегородке
P31.X:=480; P32.X:=480; P33.X:=480; P34.X:=480; P35.X:=480;
P31.Y:=Round(P11.Y+(P21.Y-P11.Y)*(480-P11.X)/(P21.X-P11.X));
P32.Y:=Round(P12.Y+(P22.Y-P12.Y)*(480-P12.X)/(P22.X-P12.X));
P33.X:=P32.X; P33.Y:=P32.Y;
P34.Y:=Round(P14.Y+(P24.Y-P14.Y)*(480-P14.X)/(P24.X-P14.X));
P35.Y:=Round(P15.Y+(P25.Y-P15.Y)*(480-P15.X)/(P25.X-P15.X));
end;
// Прорисовка фигуры
procedure TForm1.PaintImg(Color: TColor);
begin
Image1.Canvas.Pen.Color:=Color;
Image1.Canvas.MoveTo(P41.X,P41.Y);
Image1.Canvas.LineTo(P42.X,P42.Y);
Image1.Canvas.LineTo(P43.X,P43.Y);
Image1.Canvas.LineTo(P44.X,P44.Y);
Image1.Canvas.LineTo(P45.X,P45.Y);
Image1.Canvas.LineTo(P41.X,P41.Y);
end;
end.
Пишите на Myst1986@mail.ru