Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Создание своего класса в Delphi 7 
:(
    Опции темы
Sosisko
Дата 13.11.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



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

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

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

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

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

Код

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) и вообще что я сделал не так и почему не работает )
СПАСИБО.
PM MAIL   Вверх
OdesitVadim
Дата 13.11.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 9.11.2007
Где: Одесса:)

Репутация: нет
Всего: нет



Приватный конструктор? это интересно. и как вы думаете его вызывать? smile 
мало того, имя  Fcreate не совсем подходит, хотя никто не запрещал.
Код

Function Coord1:TPanel;
  Procedure Coord2(Coord:Tpanel);
         Property CoordFigure:TPanel        будет ходить по панелькам
                             read Coord1
                             write Coord2;

этот код лучше написать так
Код

private
  function GetCoordFigure:TPanel;
  procedure SetCoordFigure(const Value:TPanel);
public
  property CoordFigure:TPanel read GetCoordFigure write SetCoordFigure;

почему такие имена? так принято.

Но сделать поле в виде 64 панелек - супер!
PM MAIL   Вверх
WaReZMEN
Дата 13.11.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Констуркто и деструктор пишется в Public
Код

constructor Fcreate (Coord:Tpanel); 

дисктруктор
Код

destructor destroy;


PM MAIL ICQ   Вверх
OdesitVadim
Дата 13.11.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 9.11.2007
Где: Одесса:)

Репутация: нет
Всего: нет



дЕструктор пишеться немного не так
Код

destructor Destroy; override;
....
destructor Destroy;
begin
  //ваш код
  inherited;
end;

PM MAIL   Вверх
Sosisko
Дата 13.11.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



OdesitVadim, 
Цитата

Приватный конструктор? это интересно. и как вы думаете его вызывать?

ну мне учитель сказал в приват его )
Цитата

Но сделать поле в виде 64 панелек - супер! 

видимо ты очень хорошо разбираешься )
да именно так
написано массивом
 спасибо.

Добавлено через 5 минут и 3 секунды
вот сама доска


Присоединённый файл ( Кол-во скачиваний: 21 )
Присоединённый файл  DOSKA.part1.rar 117,19 Kb
PM MAIL   Вверх
Sosisko
Дата 13.11.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



part 2

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  DOSKA.part2.rar 46,36 Kb
PM MAIL   Вверх
OdesitVadim
Дата 13.11.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 9.11.2007
Где: Одесса:)

Репутация: нет
Всего: нет



В делфи конструктор в приват не суётся. Это применяют иногда в С++, когда нужно сделать класс, который не должен создаваться "обычным методом", а только через специальный.
А в делфи приватный консруктор... Если других нет, то его и нельзя вызвать - тоесть нельзя создать экземляр класса. вопрос, что делать с таким классом, если у него нет классовых методов? Спроси преподавателя об этом.

Добавлено через 2 минуты и 25 секунд
Я бы сделал просто PintBox или панельку, на которой бы нарисовал поле. и всё. а фигурам вместо координамы в виде панельки передавал бы нормальные координаты (x,y)
Хотя каждый сочиняет проблемы на свою голову сам.
PM MAIL   Вверх
Sosisko
Дата 13.11.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



OdesitVadim, 
Цитата
В делфи конструктор в приват не суётся. Это применяют иногда в С++, когда нужно сделать класс, который не должен создаваться "обычным методом", а только через специальный.
А в делфи приватный консруктор... Если других нет, то его и нельзя вызвать - тоесть нельзя создать экземляр класса. вопрос, что делать с таким классом, если у него нет классовых методов? Спроси преподавателя об этом.


хорошо

покажи как бы ты сделал етот класс в этой доске, если несложно =)

Добавлено через 1 минуту и 46 секунд
Цитата

Я бы сделал просто PintBox или панельку, на которой бы нарисовал поле. и всё. а фигурам вместо координамы в виде панельки передавал бы нормальные координаты (x,y)
Хотя каждый сочиняет проблемы на свою голову сам. 

дак вот именно что я несоображаю как мне проще будет)
поэтому и прошу помочь)

Это сообщение отредактировал(а) Sosisko - 13.11.2007, 15:13
PM MAIL   Вверх
Sosisko
Дата 13.11.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



всё это выглядит теперь вот так:
Код

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
 [color=red] Function GetHodFigure:TPanel;[/color]
  Procedure SetHodFigure(a:TPAnel);
           end;

  Private
  constructor Fcreate (Coord:Tpanel);
  end;

Подскажи почему ошибка там где красное?
PM MAIL   Вверх
ama_kid
Дата 13.11.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Цитата
почему ошибка там где красное?

Код
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;  // <===Что закрывает этот end???
  Public
    Function GetHodFigure:TPanel;
  Procedure SetHodFigure(a:TPAnel);
           end;  // <===Что закрывает этот end???
  Private
    constructor Fcreate (Coord:Tpanel); // Конструктор, как тебе уже говорили, должен быть public
  end;




--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Sosisko
Дата 13.11.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



ama_kid, end - это заглушка =)
неправильно?
PM MAIL   Вверх
skyboy
Дата 13.11.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Sosisko, end без предшевствующего ему 
  • begin
  • try..finally
  • try..except
  • class
  • interface
является не "заглушкой", а синтаксической ошибкой. Ибо синтаксис - строгая штука.
Цитата(OdesitVadim @  13.11.2007,  13:19 Найти цитируемый пост)
это интересно. и как вы думаете его вызывать? 

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

PM MAIL   Вверх
WaReZMEN
Дата 14.11.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



OdesitVadim,  на сколько я помню  override пишется если класс наследуется от другоГо...
Здесь я просто сразу не заметил... smile

Sosisko, 

1. А нахрена наследовать от TObject?

2.
 
Код

  TDoska = class (TObject)

  private
  mass:array [0..7,0..7] of TPanel;
  protected
  public
    Constructor Create();
  end;


если не используешь protected или private или public то их пИсать не обязательно.
Слушай а нахрена все панельками???? Есть просто канвас в конце концов.... 


M
Alexeis
Модератор: проверяйте орфографию.



Это сообщение отредактировал(а) Alexeis - 14.11.2007, 10:37
PM MAIL ICQ   Вверх
Alexeis
Дата 14.11.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(WaReZMEN @  14.11.2007,  01:12 Найти цитируемый пост)
А нахрена наследовать от TObject?

  Можно это и не писать. Любой класс по умолчанию будет наследником TObject.

Цитата(WaReZMEN @  14.11.2007,  01:12 Найти цитируемый пост)
Есть просто канвас в конце концов.... 

  Канвас и панелька это совершенно разные классы, которые не заменяют друг друга.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Sosisko
Дата 14.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



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

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

PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.