|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |