Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Вопрос по ООП   Найти похожие ветки 

 
Arx   (2007-08-12 20:03) [0]

Я довольно долго работал в Delphi, создал пару логических игр, редакторов, но с ООП не работал и вот решил научиться. Принцип создания классов, полей и методов я освоил, но вот с конкретным созданием объектов сложности.
Задача такая: создать программу, которая создавала бы при клике левой кнопкой мыши на форму объект, например квадрат (нарисованный в Canvas), а при клике правой кнопкой мыши на любом уже созданном объекте объект исчезал.
Позже, хотелось бы освоить взаимодействия объектов, например, когда один объект касается другово такого-же, оба исчезают.


 
Leonid Troyanovsky ©   (2007-08-12 21:10) [1]


> Arx   (12.08.07 20:03)  

> Задача такая: создать программу, которая создавала бы при
> клике левой кнопкой мыши на форму объект, например квадрат
> (нарисованный в Canvas), а при клике правой кнопкой мыши

Поищи у себя  на компе graphex.dpr.
Это - про левую кнопку.

Ну, а про правую, надо почитать книжечку к.л. по OOP Delphi.

--
Regards, LVT.


 
Kostafey ©   (2007-08-12 21:52) [2]

> при клике левой кнопкой мыши на форму объект, например квадрат
> (нарисованный в Canvas)

В конструкторе описать рисование квадрата,
в свойства - его координаты.


> при клике правой кнопкой мыши на любом уже созданном объекте
> объект исчезал

Ловим координаты мышки, перебираем свойства созданных объектов.
В деструкторе рисуем на том же месте квадрат малевича :)
Если объет создавался на основе какого-нибудь shape, то это даже не понадобится.


> Позже, хотелось бы освоить взаимодействия объектов, например,
> когда один объект касается другово такого-же, оба исчезают.

Тоже все решается перебором.


 
Arx   (2007-08-12 22:07) [3]

Понятно всё кроме этого самого "перебора", у меня получается работать только с последним созданным объектом. Я возможно не правильно их создаю.

Var
Имя: Класс (созданный мной)

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
Имя:=Класс.Create;
//X, Y становятся свойствами объекта "Имя", рисуется квадрат.
end;

Объект "Имя" я создаю заново каждый раз, и боюсь это не правильно...


 
Германн ©   (2007-08-12 22:11) [4]


> Объект "Имя" я создаю заново каждый раз, и боюсь это не
> правильно...
>

Неправильно что переменная, в которой хранится адрес созданного объекта одна единственная.


 
Kostafey ©   (2007-08-12 22:14) [5]

> Понятно всё кроме этого самого "перебора", у меня получается
> работать только с последним созданным объектом.

Это что шутка?

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

Я б просто маасив сделал.
Var
 ArrOfMyClass: array [0..99] of TMyClass
 i: byte;

при, например создании формы i:=0;
И далее

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 ArrOfMyClass[i]:=TMyClass.Create(X,Y);
 inc(i);
end;


 
Leonid Troyanovsky ©   (2007-08-12 22:15) [6]


> Arx   (12.08.07 22:07) [3]

> не правильно их создаю.

Возможно, что правильно было бы почитать хотя бы это
http://groups.google.com/group/borland.public.delphi.vcl.components.using/msg/3b9bce864c6dfb49

--
Regards, LVT.


 
Германн ©   (2007-08-12 22:24) [7]


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

Зачем такие сложности. Есть ведь TList, TObjectList


 
Arx   (2007-08-12 22:28) [8]

Спасибо. Массив, кажется, именно то, что нужно....


 
Leonid Troyanovsky ©   (2007-08-12 23:02) [9]


> Arx   (12.08.07 22:28) [8]

> Спасибо. Массив, кажется, именно то, что нужно....

Это только кажется.

Например, массив Components был бы, безусловно, более полезен.
Бо, при разрушении item он актуализируется.

См. также Notification procedure.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
2-1186909904
loeg
2007-08-12 13:11
2007.09.02
Два вопроса


4-1173526703
BOGa
2007-03-10 14:38
2007.09.02
Обмен данными между процессами ( WM_COPYDATA)


3-1178107188
-Lex-
2007-05-02 15:59
2007.09.02
Проблема с Lookup полями


2-1186587997
Ага
2007-08-08 19:46
2007.09.02
Как удалить компонент?


15-1185986188
oldman
2007-08-01 20:36
2007.09.02
А была ли Windows 1.0 beta?