Исправить прогу ОСиСП и пояснить листинг по АКГ

Не в сети
Зарегистрирован: 10/01/2010

Исправить прогу ОСиСП графический редактор (самый приметивный) Нужно в нем исправить: после сохранения файла до закрытия програмы нельзя удалить файл. (прога использует его все ровно)

 Пояснить листинг по АКГ 

Пример листинга:

 

Листинг:

 

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.

 

Не в сети
Зарегистрирован: 10/01/2010

Пишите на Myst1986@mail.ru