• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Greg

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

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

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

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

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

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

Для: 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

<!--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

Для: 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

Попробуй так:
Код:
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

Для: 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

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

теперь нужно создать конструкторы для каждого подкласса (фигурки)
или один конструктор для класса 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

подскажите пожалуйста как загрузить картинку и указать для неё координаты?
 
G

Greg

уважаемый sax_ol это я всё понимаю))
а как это написать на языке делфи?))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!