Создание своего класса в Delphi 7

  • Автор темы Greg
  • Дата начала
G

Greg

#1
Прошу помощи в создании своего класса )

нужно создать свой класс фигуры для шахматной доски

сама шахматная доска уже создана

нужно создать свой класс имеющий некоторые свойства)

у меня вот так:

TFigure=Class(TObject)
Private
Color:Boolean; чёрная или белая
TypeFigure:String;
ImgFigure:TImage;
Protected
DestroyFigure:Boolean; срубление фигуры
OcheredHodaFigure:Boolean;
Function Coord1:TPanel;
Procedure Coord2(Coord:Tpanel);
Property CoordFigure:TPanel будет ходить по панелькам
read Coord1
write Coord2;

Public
Procedure HodFigure(a:TPAnel);

Private
constructor Fcreate (Coord:Tpanel);
end;

1) прошу помочь куда и как написать правильно конструктор с деструктором
2) Как вообще правильно написать процедуру с функцией
3) Как правильно написать read write
4) и вообще что я сделал не так и почему не работает )
СПАСИБО.
 
G

Greg

#2
Для: sax_ol
всё это выглядит вот так теперь:
TFigure=Class(TObject)
Private
Color:Boolean;
TypeFigure:String;
ImgFigure:TImage;
Protected
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean;
Private
Function GetCoordFigure:TPanel;
Procedure SetCoordFigure(const Value:Tpanel);
public
Property CoordFigure:TPanel
read GetCoordFigure
write SetCoordFigure;
end;
Public
Function GetHodFigure:TPanel;
Procedure SetHodFigure(a:TPAnel);
end;

Private
constructor Fcreate (Coord:Tpanel);
end;
подскажи почему ошибка там где красное?
 
S

Silver Wind

#3
<!--QuoteBegin-Greg+13:11:2007, 19:30 -->
<span class="vbquote">(Greg @ 13:11:2007, 19:30 )</span><!--QuoteEBegin-->end;
Public
[snapback]85508" rel="nofollow" target="_blank[/snapback]​
[/quote]

Может быть по этому? А вообще сообщение об ошибке надо тоже прилагать - здесь не телепаты собрались.
 
G

Greg

#4
Для: Silver Wind
конечно не телепаты
но я надеюсь понимающие и разбирающиеся люди

ошибка вот что говорит '=' expected but 'FUNCTION' found

если убрать end;
то ошибка сдесь:
Код:
TFigure=Class(TObject)
Private
Color:Boolean;
TypeFigure:String;
ImgFigure:TImage;
Protected
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean;
Private
[b]Function GetCoordFigure:TPanel;[/b]
Procedure SetCoordFigure(const Value:Tpanel);
public
Property CoordFigure:TPanel read GetCoordFigure write SetCoordFigure;

Public
Function GetHodFigure:TPanel;
Procedure SetHodFigure(a:TPAnel);
end;

Private
constructor Fcreate (Coord:Tpanel);
end;
Модератор: код читается лучше, если он оформлен, соответственно!
 
S

Silver Wind

#5
Попробуй так:
Код:
TFigure=Class(TObject)
Private
Color:Boolean;
TypeFigure:String;
ImgFigure:TImage;

Function GetCoordFigure:TPanel;
Procedure SetCoordFigure(const Value:Tpanel);

constructor Fcreate (Coord:Tpanel);
Protected
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean;
public
Property CoordFigure:TPanel read GetCoordFigure write SetCoordFigure;
Function GetHodFigure:TPanel;
Procedure SetHodFigure(a:TPAnel);
end;
Т.е. не надо плодить так много секций, и тем более несколько одинаковых секций вподряд. Это может и не неправильно с точки зрения синтаксиса, но уж больно путано и глаза режет. Смотри как сделаны классы в стандартных модулях Delphi, хотябы на примере TPanel.

Ну и еще один "end" конечно же был лишний.

Кстати, что за приватный конструктор класса такой с нестандартным названием? Как же этим классом пользоваться тогда? Или это не весь класс?
 
G

Greg

#6
Для: Silver Wind
Спасибо попробывал, но
Код:
TFigure=Class(TObject)
Private
Color:Boolean;
TypeFigure:String;
ImgFigure:TImage;

!!!Function GetCoordFigure:TPanel;!!!
Procedure SetCoordFigure(const Value:Tpanel);

constructor Fcreate (Coord:Tpanel);
Protected
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean;
public
!!Property CoordFigure:TPanel read GetCoordFigure write SetCoordFigure;!!
Function GetHodFigure:TPanel;
Procedure SetHodFigure(a:TPAnel);
end;
вот тут ошибка где !!!)Unsatisfied forward or external declaration: 'TFigure.GetCoordFigure'
а если эту функцию с процедурой убрать, то
ошибка там где !! отмечено - Field or method identifier expected
 
G

Greg

#7
вот теперь полный код для всей программы
всё стало работать нужно было просто заглушки поставить

теперь нужно создать конструкторы для каждого подкласса (фигурки)
или один конструктор для класса Figure
подскажите как проще
и как правильно написать синтаксически и вообще)
спасибо.
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TFigure=Class(TObject)
Private
Color:Boolean;
TypeFigure:String;
ImgFigure:TImage;
Protected
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean;
Private
Function GetCoordFigure:TPanel;
Procedure SetCoordFigure(const Value:Tpanel);

public
Property CoordFigure:TPanel
read GetCoordFigure
write SetCoordFigure;


Public
Function GetHodFigure:Boolean;virtual;
Procedure SetHodFigure(a:TPAnel);

Private
constructor Fcreate (Coord:Tpanel);

end;
TKing=class(TFigure)
constructor Fcreate(a:boolean);
Function GetHodFigure:Boolean;override;
end;
TKoroleva=class(TFigure)
Function GetHodFigure:Boolean;override;
end;
TPeshka=class(TFIgure)
Function GetHodFigure:Boolean;override;
end;
TLoshad=class(TFigure)
Function GetHodFigure:Boolean;override;
end;
TLadya=class(TFigure)
Function GetHodFigure:Boolean;override;
end;
TSlon=class(TFigure)
Function GetHodFigure:Boolean;override;
end;

TDoska = class (TObject)

private
mass:array [0..7,0..7] of TPanel;

Constructor Create();
end;

var
Form1: TForm1;
implementation

{$R *.dfm}

Constructor TDoska.Create();
var pan:TPanel; i,j,y:integer; color:TColor;
lab:TLabel;
begin
Inherited Create;
color:=$ffffff;
for i:=0 to 7 do
begin
for y:=0 to 1 do
begin
lab:=TLabel.Create(Form1);
lab.Top:=60+i*60;
lab.Left:=30+510*y;
lab.AutoSize:=true;
lab.Caption:=Inttostr(i+1);
lab.Parent:=Form1;
end;
for j:=0 to 7 do
begin
for y:=0 to 1 do
begin
lab:=TLabel.Create(Form1);
lab.Top:=20+505*y;
lab.Left:=80+j*60;
lab.AutoSize:=true;
lab.Caption:=chr(65+j);
lab.Parent:=Form1;
end;
mass[i,j]:=TPanel.Create(Form1);
mass[i,j].Left:=50+j*60;
mass[i,j].Top:=40+i*60;
mass[i,j].Height:=60;
mass[i,j].Width:=60;
mass[i,j].BevelOuter:=bvNone;
mass[i,j].Parent:=Form1;
mass[i,j].Color:=color;
if j=7 then Continue;
if (color=$ffffff) then
color:=$000000
else
color:=$ffffff;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var doska:TDoska;
begin
doska:=TDoska.Create();

end;

Function TFigure.GetCoordFigure:TPanel;
begin
end;

Procedure TFigure.SetCoordFigure(const Value:Tpanel);
begin
end;

Function TFigure.GetHodFigure:Boolean;
begin
end;

Procedure TFigure.SetHodFigure(a:TPAnel);
begin
end;

constructor TFigure.Fcreate (Coord:Tpanel);
begin
end;
Function TKing.GetHodFigure:Boolean;
begin
end;
constructor Tking.Fcreate(a:boolean);
begin
end;
Function TKoroleva.GetHodFigure:Boolean;
begin
end;
Function TPeshka.GetHodFigure:Boolean;
begin
end;
Function TLoshad.GetHodFigure:Boolean;
begin
end;
Function TLadya.GetHodFigure:Boolean;
begin
end;
Function TSlon.GetHodFigure:Boolean;
begin
end;
end.
 
G

Greg

#9
подскажите пожалуйста как загрузить картинку и указать для неё координаты?
 
G
#11
уважаемый sax_ol это я всё понимаю))
а как это написать на языке делфи?))