Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2007, 19:53   #1
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию Создание своего класса в Delphi 7 - фигуры для шахматной доски

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

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

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

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

если ктото сможет помочь то позже напишу какие

спасибо.
electric вне форума Ответить с цитированием
Старый 12.11.2007, 21:20   #2
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

вар №1:
Код:
 type
  figura = class(timage или tpanel или tshape ) либо просто =сlass
  private
    { Private declarations }
  public
    { Public declarations }
  end;
либо просто =сlass:
Код:
 type
  figura =сlass
 myimage:timage;(либо опять же панель либо shape)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Пока так.
bill вне форума Ответить с цитированием
Старый 12.11.2007, 21:47   #3
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию

bill спасибо
у меня вот так:
Код:
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) и вообще что я сделал не так и почему не работает )
СПАСИБО.
electric вне форума Ответить с цитированием
Старый 13.11.2007, 18:24   #4
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
Радость

Переделал немного.
Но есть несколько ключевых моментов:
1. Срубление фигуры-что это такое?Это значит "смерть фигуры на поле"?
2. Нет смысла писать несколько раз private ит.п. Все можно обьявлять в одном.
3. Запись конструктора такая- constructor Create(AOwner: TComponent). Все таки он един для всех элементов, как и деструктор. Описывают его обычно сразу после класса или в раздле public.
4. У функций и процедур должны быть уникальные имена, по которым их будут отличать.
procedure lala (s:integer); // lala-имя, s- передаваемый параметр.
function rara (s:string;e:real):integer;// выдает значение типа integer.
+ думаю тебе не нужен конструктор здесь. Он нужен если ты хочешь его изменить, но для этого надо указать ему свои новые параметры и дирекктиву override в конце и естественно переписать его.

попробуй создать отдельный модуль и вписать туда свой тип:

Код:
TFigure=Class(TObject)
 private
    { Private declarations }
    Color:Boolean;            
        TypeFigure:String;
        ImgFigure:Timage;
  protected
  { protected declarations }
      DestroyFigure:Boolean;
      OcheredHodaFigure:Boolean;
      Function Coords1:TPanel;
  Procedure Coord2(Coord:Tpanel);
   Property CoordFigure: TPanel read Coords1 write Coord2;{стоит ключевое слово property, которое говорит о том, что мы объявляем свойство. После этого идёт имя свойства и после двоеточия стоит тип. После этого идёт ключевое слово read, за которым идет функция, которая будет использоваться при чтении события.После ключевого
слова write ставится функция, которая будет использоваться для
записи в событие.}
   Public
  Procedure HodFigure(a:TPanel);
  end;

Последний раз редактировалось bill; 13.11.2007 в 18:37.
bill вне форума Ответить с цитированием
Старый 13.11.2007, 20:21   #5
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию

billя тут тоже переделал немного
Код:
 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;
подскажи мне почему у меня ошибка там где красным отмечен?
electric вне форума Ответить с цитированием
Старый 14.11.2007, 16:12   #6
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Ну во-первых, вижу что этот класс обьявляешь в главном модуле самого приложения. Лучше все делать в отдельном модуле- не запутаешься.
1. Про функцию. А ты ее дальше описал? Скорее всего у тебя просто делфи пишет на превосходном английском,что функция не найдена-нет самого кода в разделе implementation. Что-то типа того.
2. Ошибка будет если оставишь так конструктор. Либо удали ее, либо в конц добавь директиву override и также сделай деструктор. При этом потом придется его переделывать.
3. Зачем писать несколько раз private ит.п, если все можно обьявить сразу в одном разделе?
4. И вообще чем гадать выложил бы весь код, а не только свой класс.
bill вне форума Ответить с цитированием
Старый 14.11.2007, 19:27   #7
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию

bill
вот теперь это весь код
всё работает
теперь нужно создать конструктор для каждого подкласаа (фигурки)
или для всего класса 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.
electric вне форума Ответить с цитированием
Старый 15.11.2007, 18:08   #8
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Код:
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);
  constructor Create (AOwner:TComponent);override;
  Destructor Destroy;override;end;
…
constructor TFigure.Create(AOwner: TComponent);
begin
//Вызываем конструктор предка
inherited Create(AOwner); …
end;
Ключевое слово override; после имени этих процедур говорит о том, что мы хотим переписать уже существующую у предка функцию с таким именем.
Ключевое слово inherited вызывает конструктор предка (в твоем случае TObject). Это необходимо, потому что предок тоже может делать что-то важное в конструкторе и если мы не вызовем его конструктор, то могут возникнуть проблемы.
Код:
destructor TFigure.Destroy;
begin
….
inherited Destroy;
end;
Заметь, что в конструкторе я вызывал предка в самом начале
inherited, а в деструкторе в самом конце. В конструкторе сначала нужно, чтобы инициализировался предок (он проинициализирует необходимые ссылки), а потом можно инициализировать свои вещи. В деструкторе наоборот ты должен сначал все удалить а потом удалить и сам класс.
bill вне форума Ответить с цитированием
Старый 15.11.2007, 19:33   #9
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию

спасибо Билл
не отключайся пжлста)
electric вне форума Ответить с цитированием
Старый 18.11.2007, 15:45   #10
electric
 
Аватар для electric
 
Регистрация: 12.11.2007
Сообщений: 8
По умолчанию

подскажите пожалуйста как загрузить картинку и указать для неё координаты?
electric вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего меню в Exele W50586 Microsoft Office Excel 2 23.06.2008 15:20
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28
Создание своего типа данных xGroupers Общие вопросы Delphi 4 12.05.2008 13:53
Создание своего собственого компилятора xGroupers Общие вопросы Delphi 3 06.05.2008 23:41
Создание своего формата AnaSha Microsoft Office Excel 1 09.01.2007 16:20