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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 20:49   #1
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию как сделать Класс типа Image

Мне нужно сделать класс типа Image на примере сча скажу что мне нужно
вот код программы я хочу на простейшем понять.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  type // сдесь создаю класс как я понимаю типа Image
  TIm = class(TImage)
  a:TImage; //Это переменая будет счетаться по параметрам как компонент Image ?
  procedure Init(s:TImage);// Эта процедура для сохранение в переменую 
а компонент Image
  end;

var
  Form1: TForm1;

implementation

procedure TIm.Init;
begin
a:=s;
a:=a.Left+5;
end;
//Вроде все хорошо но почему компилятору не нравиться переменая по чему переменая не наследует параметры и свойства компонента Image?

Зарание спс это мне оч нужно!!

Последний раз редактировалось Stilet; 18.09.2010 в 12:06.
SevenXP вне форума Ответить с цитированием
Старый 17.09.2010, 20:54   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

А зачем создается класс TIm? Цель в чем?

Переменная ему нравится. Ему не нравиться дикое выражение a:=a.Left+5;
Можно ли переменной, ссылающейся на объект присваивать целочисленное значение?

Последний раз редактировалось Прик; 17.09.2010 в 21:01.
Прик вне форума Ответить с цитированием
Старый 17.09.2010, 21:02   #3
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Данный код работать не будет(вылетит ошибка доступа по адресу)! А вообще сложно понять что вы пытаетесь сделать. Поэтому дать какие-то советы и разъяснения трудно.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 17.09.2010, 21:05   #4
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

У меня есть несколько Image характеристика все у них похоже и выполняют обсолютно одинаковые действия по этому хочу сделать класс Image
В процессе в классе TIm будет несколько важных процедур так что бы не переписывать код заного и не менять имя Image1 на Image2 а так что бы допустим процедура Mov(image1);
SevenXP вне форума Ответить с цитированием
Старый 17.09.2010, 21:07   #5
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

XeruH
Мне нужно что бы переменая (A) хранил компонент Image что бы я мог писать a.left+5 за мест Image1.Left+5
Причем так что бы в переменую (а) заносился компонент при вызове процедуры в которой в скобках я укажу компонент (Image)

Последний раз редактировалось SevenXP; 17.09.2010 в 21:11.
SevenXP вне форума Ответить с цитированием
Старый 17.09.2010, 21:50   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В классе TIm не нужна переменная типа TImage, потому что этот класс и есть TImage (точнее - его наследник со всеми вытекающими).

Для того чтобы решить задачу, надо почитать про полиморфизм в ООП.
Здесь же, если примитивно, надо сделать один класс (пусть это будет TIm) с процедурой Init (далее, при необходимости, можно дополнить другими методами и свойствами) и использовать его как предка для других классов, которые будут вести себя несколько иначе, но они вынужденно будут наследовать процедуру Init.
Прик вне форума Ответить с цитированием
Старый 17.09.2010, 21:54   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
type // сдесь создаю класс как я понимаю типа Image
здесь мы только описали класс.
чтобы начать пользоваться надо создать экзепляр данного класса
Код:
im:=Tim.Create;//создание экземпляра типа Tim и сохранения для последующего использования а переменную im.

im.Init(image1); //это будет применение метода Int к экземпляру im
Код:
TIm = class(TImage)
в данном случае это (наследование от Timage) излишне
достаточно будет
Код:
Tim=class(Tobject) или TIm=class
все данные (ксли их туда кто либо поместит) будут содержаться в переменной
Код:
a:TImage; //Это переменая будет счетаться по параметрам как компонент Image
Цитата:
если их туда кто либо поместит
за это у нас отвечает процедура
Код:
procedure Init(s:TImage);// Эта процедура для сохранение в переменую
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.09.2010, 22:15   #8
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Ой-ой-ой...извините, но на код смотреть страшно
Вобщем почитайте про ООП (см. вложение), а также хорошая статья (назв. Рабство программиста...) есть в журнале ПРОграммист (2 номер) ==> вот тут
Вложения
Тип файла: rar oop.rar (12.6 Кб, 25 просмотров)
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 17.09.2010, 22:40   #9
SevenXP
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 44
По умолчанию

Так не заблуждайте меня класс свой я правильно наследую
во вторых я прошу сказать правильно ли я обьявил переменую (А), по ходу нет, по тому что я не могу применять свойства обычного Image
Вот и прошу как мне обьявить переменую что бы она счеталась как Image и понимало такое выражение Image1.Left+5 все что я прошу
SevenXP вне форума Ответить с цитированием
Старый 18.09.2010, 00:12   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Так не заблуждайте меня класс свой я правильно наследую
в таком случае полагаю надо так

Код:
var a: Tim; .//и никаких a: Timage; внутри класса

a:=Tim.Create(????);
a.Init(???);
только вот что ты будешь писать вместо ???? я не могу представить.
Могу предположить, что можешь написать, но к чему это приведет предсказать не берусь.

сравни
Цитата:
im:=Tim.Create;//создание экземпляра типа Tim и сохранения для последующего использования а переменную im.

im.Init(image1); //это будет применение метода Int к экземпляру im
Цитата:
Вот и прошу как мне обьявить переменую что бы она счеталась как Image и понимало такое выражение Image1.Left+5 все что я прошу
полагаю это как
чтобы любой объект типа Timage понимал выражение left:=left+5
или так
чтобы к любому объекту типа Timage можно было применить метод Init

в этом случае

Код:
type 
Tim=class(Timage)
private
  procedure Init;
end;

procedure Tim.Init;
begin
  self.left:=self.Left+5;
end;
и использовать где-то в коде
Код:
  Tim(image1).Init;
это применять надо с полным пониманием правил OOП, которых пока недостаточно.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 18.09.2010 в 00:40.
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать сайт за 2 дня (без помощи конструкторов типа народ.ру) Coel HTML и CSS 3 25.07.2010 16:08
Как сделать типа облака тэгов Drek JavaScript, Ajax 7 09.11.2009 05:43
Как сделать чтобы файлы определенного типа открывались программой? Вадим Буренков Общие вопросы Delphi 3 07.07.2009 13:47
как сделать форму невидимой,а компонент image нет!? hacknet Общие вопросы Delphi 4 15.11.2008 10:01