![]() |
|
|
Регистрация | << Правила форума >> | 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. |