Страница 1 из 2
Создание своего класса в Delphi 7
Добавлено: 13 ноя 2007, 13:23
electric
Прошу помощи в создании своего класса )
нужно создать свой класс фигуры для шахматной доски
сама шахматная доска уже создана
нужно создать свой класс имеющий некоторые свойства)
у меня вот так:
Код: Выделить всё
TFigure=Class(TObject)
[B]Private[/B]
Color:Boolean; чёрная или белая
TypeFigure:String;
ImgFigure:TImage;
[B]Protected[/B]
DestroyFigure:Boolean; срубление фигуры
OcheredHodaFigure:Boolean;
[B]Function[/B] Coord1:TPanel;
[B]Procedure[/B] Coord2(Coord:Tpanel);
[B]Property[/B] CoordFigure:TPanel будет ходить по панелькам
[B]read[/B] Coord1
[B]write[/B] Coord2;
[B]Public[/B]
Procedure HodFigure(a:TPAnel);
[B]Private[/B]
constructor Fcreate (Coord:Tpanel);
end;
1) прошу помочь куда и как написать правильно конструктор с деструктором
2) Как вообще правильно написать процедуру с функцией
3) Как правильно написать
read write
4) и вообще что я сделал не так и почему не работает )
СПАСИБО.
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 03:21
Insane
Код: Выделить всё
TCellColor = (Black, White);
TFigure=Class
Private
FColor:TCellColor;
FTypeFigure:String; //Можно поступить, как с цветом.
FImgFigure:TImage;
DestroyFigure:Boolean;
OcheredHodaFigure:Boolean; //???
Function Coord1:TPanel;
Procedure Coord2(Coord:Tpanel);
Public
Procedure HodFigure(a:TPAnel);
Property [B]CoordFigure:TPanel read Coord1 write Coord2;[/B]
constructor Сreate (Coord:Tpanel);
end;
1)Конструктор и деструктор обьявляются либо в Public либо в Protected обычно. Да вообще без разницы где. Смысл в том, что если ты объявляешь конструктор в Public, его смогут увидеть потомки данного класса...ну, и т.п.
2) офигеть у вас вопросики, батенька
3) read, write, default, index. Всё это ключевые слова для работы со свойствами.
например:
Код: Выделить всё
TMyClass = class
private
FMyField: Integer;
published
property MyProperty: Integer read {откуда читаем в свойство} FMyField write {куда записываем свойство} FMyFiled;
end;
4)

))
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 09:46
somewhere
Ну вы ребят даете... Что можно сказать о шахматной фигуре в разрезе игры?
1. Однозначно имеет тип, причем перечисленный, так как фигур не много, игрок в процессе их не вырезает из дерева на станке.
2. Имеет свои координаты - просто числа, а не панельки - реализация вашей отрисовки коня например шахматного волнует мало.
3. Имеет свой цвет, здесь вы правы, который по сути даже и не цвет вовсе, а признак принадлежности к игроку. Для начала пусть будет цвет.
4. Имеет свои правила хода, в класе фактически будет функция GetAction которая даст список доступных ходов (опять же не панельки, а числа) ядру искуственного интелекта.
5. Должна уметь уничтожаться.
По-хорошему поле типа даже и не нужно. Должен быть общий класс TFigure и унаследованные от него классы TKnight, TKing и т.д. с перегруженными методами вроде GetAction
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 09:54
Insane
оффтоп:
Не вижу смысла даже вникать в суть написания этой проги, так как уже заранее известно, что работать ей не судьба, пока программер не подрастёт
А вообще, вопрос стоял именно в объявлении класса.
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 14:12
Игорь Акопян
ну если про класс...
Конструктор класса унаследованного от TObject должен быть как минимум перекрытым (override),называться Create и иметь сходный набор параметров. Первой строкой в нём должен быть вызов родительского конструктора с помощью инструкции Inherited
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 14:50
somewhere
" писал(а):Конструктор класса унаследованного от TObject должен быть как минимум перекрытым (override),называться Create и иметь сходный набор параметров. Первой строкой в нём должен быть вызов родительского конструктора с помощью инструкции Inherited
Да зачем надо от TObject наследоваться, его методы и свойства никак в задаче жизнь не облегчат. Надо класс с нуля начинать.
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 15:28
Duncon
somewhere очень интересно посмотреть на твой класс с нуля.
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 16:29
somewhere
TObject не есть низ классовой структуры, вот например как он описан:
Код: Выделить всё
TObject = class
constructor Create;
procedure Free;
class function InitInstance(Instance: Pointer): TObject;
procedure CleanupInstance;
function ClassType: TClass;
class function ClassName: ShortString;
class function ClassNameIs(const Name: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer;
class function InstanceSize: Longint;
class function InheritsFrom(AClass: TClass): Boolean;
class function MethodAddress(const Name: ShortString): Pointer;
class function MethodName(Address: Pointer): ShortString;
function FieldAddress(const Name: ShortString): Pointer;
function GetInterface(const IID: TGUID; out Obj): Boolean;
class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
class function GetInterfaceTable: PInterfaceTable;
function SafeCallException(ExceptObject: TObject;
ExceptAddr: Pointer): HResult; virtual;
procedure AfterConstruction; virtual;
procedure BeforeDestruction; virtual;
procedure Dispatch(var Message); virtual;
procedure DefaultHandler(var Message); virtual;
class function NewInstance: TObject; virtual;
procedure FreeInstance; virtual;
destructor Destroy; virtual;
end;
...
...
class function TObject.ClassParent: TClass;
{$IFDEF PUREPASCAL}
begin
Pointer(Result) := PPointer(Integer(Self) + vmtParent)^;
if Result <> nil then
Pointer(Result) := PPointer(Result)^;
end;
{$ELSE}
asm
MOV EAX,[EAX].vmtParent
TEST EAX,EAX
JE @@exit
MOV EAX,[EAX]
@@exit:
end;
{$ENDIF}
class function TObject.NewInstance: TObject;
begin
Result := InitInstance(_GetMem(InstanceSize));
end;
procedure TObject.FreeInstance;
begin
CleanupInstance;
_FreeMem(Self);
end;
...
...
...
ну и так далее...
Re: Создание своего класса в Delphi 7
Добавлено: 28 ноя 2007, 16:44
Duncon
somewhere а зачем мне показывать класс TObject который по умолчанию является родителем всего..
Твоя запись дословно означает
TObject = class
Создаю новый класс TObject унаследованный от TObject, видимо пространство имен это позволяет.
Re: Создание своего класса в Delphi 7
Добавлено: 29 ноя 2007, 08:55
somewhere
Duncon, ты прямо подорвал мою веру во все хорошее ))))
Сколько лет считал что класс может быть пустым и можно строить его как угодно, а тут такая подстава. Что интересно, раньше я этого не замечал и вышеприведенный код это только и доказывал, хотя сейчас мне сложно понять как TObject был создан из самого себя. Очень жаль, что все эти детища от него наследованы. Спасибо за объяснение, впредь буду знать...