|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Помогите найти ошибку, пожалуйста Программа для рисования интерьера комнаты (ОЧЕНЬ ОЧЕНЬ УБОГАЯ). Для представления стола, тумбы, картины использованы собственные классы (с двухуровневой иерархией). Предусмотрена возможность вернуться к редактированию любого объекта. Проблема одна - программа НЕ РАБОТАЕТ. Несколько опытных (более трёх лет программирования на Delphi) просмотрели целиком и полностью код программы, НО при вызове конструктора объекта возникает ошибка. Код: 
unit Foot1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    ColorBox1: TColorBox;
    Button4: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure PaintBox1Paint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  end;
  TStol = class
    PaintBox1: TPaintbox;
    ColorBox1: TColorBox;
    X5, y5: integer;
    procedure Draw(Sender: TObject);
  end;
  TInterer = class
    FCanvas: TCanvas;
    constructor create(Canvas: Tcanvas);
  end;
  TKartina = class(TInterer)
    y5: integer;
    x5: integer;
    constructor Create(Canvas: TCanvas);
    procedure Draw(Sender: TObject);
  end;
  TTumba = class
    PaintBox1: TPaintbox;
    ColorBox1: TColorBox;
    X5, y5: integer;
    procedure Draw(Sender: TObject);
  end;
var
  Stol: TStol;
  Kartina: TKartina;
  Tumba: TTumba;
  Massiv: array[1..1000] of TObject;
  Form1: TForm1;
  SizeX: Integer;
  SizeY: Integer;
  k: integer;
  y6, x6, i, j: integer;
  r6, r7, r2, r3, r4, r5, g, h: integer;
implementation
{$R *.dfm}
constructor TInterer.create(Canvas: Tcanvas);
begin
  FCanvas := Canvas;
end;
procedure TStol.Draw(Sender: TObject);
var
  X1, X2, Y1, Y2, r, r1: integer;
begin
  Stol := TStol.Create;
  X5 := SizeX div 2;
  Y5 := SizeY div 2;
  X5 := X5 + k;
  Y5 := Y5 - k;
  X6 := X5 + r6 - r7 + k;
  Y6 := y5 + r7 + k;
  with Form1.PaintBox1.Canvas do begin
    MoveTo(X5, Y5);
    LineTo(X5, Y5 - r6);
    LineTo(X5 + r6, Y5 - r6);
    LineTo(X6, Y6 - r6);
    LineTo(X6 - r6, Y6 - r6);
    LineTo(X5, Y5 - r6);
    MoveTo(X6, Y6);
    LineTo(X6, Y6 - r6);
    MoveTo(X6 - r6, Y6);
    LineTo(X6 - r6, Y6 - r6);
    MoveTo(X5 + r6, Y5);
    LineTo(X5 + r6, Y5 - r6);
  end;
  K := 0;
  Massiv[i] := Stol;
  i := i + 1;
end;
constructor TKartina.Create(Canvas: TCanvas);
begin
  inherited create(Canvas);
  Self.x5 := 0;
  Self.y5 := 0;
end;
procedure TKartina.Draw;
begin
  with FCanvas do begin
    MoveTo(X5, Y5);
    LineTo(X5, Y5 - r3);
    LineTo(X5 + r2, Y5 - r3);
    LineTo(X5 + r2, Y5);
    LineTo(X5, Y5);
  end;
end;
procedure TTumba.Draw(Sender: TObject);
var
  X1, X2, Y1, Y2, r, r1: integer;
begin
  X5 := SizeX div 2;
  Y5 := SizeY div 2;
  Tumba := TTumba.Create;
  with Form1.PaintBox1.Canvas do begin
    MoveTo(X5, Y5);
    LineTo(X5, Y5 - r4);
    LineTo(X5 + r4, Y5 - r4);
    LineTo(X5 + r4 - r5, Y5 - r4 + r5);
    LineTo(X5 - r5, Y5 - r4 + r5);
    LineTo(X5, Y5 - r4);
    MoveTo(X5, Y5);
    LineTo(X5, Y5);
    LineTo(X5 + r4, Y5);
    LineTo(X5 + r4 - r5, Y5 + r5);
    LineTo(X5 - r5, Y5 + r5);
    LineTo(X5, Y5);
    MoveTo(X5 + r4, Y5);
    LineTo(X5 + r4, Y5 - r4);
    MoveTo(X5 - r5, Y5 + r5);
    LineTo(X5 - r5, Y5 - r4 + r5);
    MoveTo(X5 + r4 - r5, Y5 + r5);
    LineTo(X5 + r4 - r5, Y5 - r4 + r5);
  end;
  K := 0;
  Massiv[i] := Tumba;
  i := i + 1;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  X1, X2, Y1, Y2, X3, Y3, X4, Y4, R: Integer;
begin
  Color := clBlack;
  SizeX := PaintBox1.Width;
  SizeY := PaintBox1.Height;
  R := 800;
  X1 := SizeX div 2;
  Y1 := SizeY div 2;
  X2 := SizeX div 2;
  Y2 := -SizeY;
  X3 := X1 - R;
  Y3 := Y1 + R;
  X4 := SizeX;
  Y4 := SizeY div 2;
  with PaintBox1.Canvas do begin
    Pen.Width := 2;
    Pen.Color := clWhite;
    MoveTo(X1, Y1);
    LineTo(X2, Y2);
    MoveTo(X1, Y1);
    LineTo(X3, Y3);
    MoveTo(X1, Y1);
    LineTo(X4, Y4);
    Pen.Color := ColorBox1.Selected;
  end;
  k := 0;
  i := 1;
  r6 := 100;
  R7 := 70;
  R2 := 100;
  R3 := 70;
  R4 := 150;
  R5 := 70;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  i := i + 1;
  Massiv[i] := Kartina.Create(PaintBox1.Canvas);
  with PaintBox1.Canvas do begin
    Pen.Color := ColorBox1.Selected;
  end;
  Stol.Draw(PaintBox1.Canvas);
  ComboBox1.Items.AddObject('Стол', Massiv[i - 1]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  i := i + 1;
  Massiv[i] := Kartina.Create(PaintBox1.Canvas);
  with PaintBox1.Canvas do begin
    Pen.Color := ColorBox1.Selected;
  end;
  Kartina.Draw(PaintBox1.Canvas);
  ComboBox1.Items.AddObject('Картина', Massiv[i]);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
  with PaintBox1.Canvas do begin
    Pen.Color := ColorBox1.Selected;
  end;
  Tumba.Draw(PaintBox1.Canvas);
  ComboBox1.Items.AddObject('Тумба', Massiv[i - 1]);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
  G := StrToInt(Trim(edit1.Text));
  h := StrToInt(Trim(edit1.Text));
  K := StrToInt(Trim(edit3.Text));
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
  for j := 1 to i do
  begin
    if j = ComboBox1.ItemIndex then
    begin
      r2 := StrToInt(Trim(edit7.Text));
      r3 := StrToInt(Trim(edit8.Text));
      Kartina.Draw(PaintBox1.Canvas);
    end;
  end;
end;
end.
Последний раз редактировалось Ziran, 07.05.2011 в 00:12. | 
| 
			 
			#2  
			
			
			
			
		 | |||
| 
 | |||
|   Мама дорогая.... Это в принциапе работать не будет. Даже если найдем почему вылетает ошибка... кстати, в какой строке и какое сообщение об ошибке? | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Project Project.exe raised exception class EAccessViolation with message 'Access violation at address 00457B48 in module 'Project.exe'. Read of address 00000004'.  На строке Constructor TInterer.create(Canvas: Tcanvas); begin FCanvas := Canvas; | 
| 
			 
			#4  
			
			
			
			
		 | |||
| 
 | |||
|   это просто "чудо"    будет проще всё заново переделать, чем разобрать это | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Трандуль, подлый ты человек    Ты же знаешь, чей это исходник, над ним и трещи  | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   Их Вашего года совершенно непонятно, как создается Ваша Kartina, например в  Код: Kartina.Create(PaintBox1.Canvas); Код: TKartina.Create(PaintBox1.Canvas); Кроме того, что-то не видно освобождения объектов после их создания Несколько опытных просмотрели целиком и полностью код программы???? | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
  |