![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по ООП
Arx © (2007-08-12 20:03:00)Я довольно долго работал в Delphi, создал пару логических игр, редакторов, но с ООП не работал и вот решил научиться. Принцип создания классов, полей и методов я освоил, но вот с конкретным созданием объектов сложности.
Задача такая: создать программу, которая создавала бы при клике левой кнопкой мыши на форму объект, например квадрат (нарисованный в Canvas), а при клике правой кнопкой мыши на любом уже созданном объекте объект исчезал.
Позже, хотелось бы освоить взаимодействия объектов, например, когда один объект касается другово такого-же, оба исчезают.
Leonid Troyanovsky (2007-08-12 23:02:00) [1]
> Arx (12.08.07 22:28) [8]
> Спасибо. Массив, кажется, именно то, что нужно....
Это только кажется.
Например, массив Components был бы, безусловно, более полезен.
Бо, при разрушении item он актуализируется.
См. также Notification procedure.
--
Regards, LVT.
Arx (2007-08-12 22:28:00) [2]Спасибо. Массив, кажется, именно то, что нужно....
Германн (2007-08-12 22:24:00) [3]
> меня сейчас пинать начнут, про связанные спсики или
> еще чего посложнее, ну ладно рискну.
Я б просто маасив сделал.
Зачем такие сложности. Есть ведь TList, TObjectList
Leonid Troyanovsky (2007-08-12 22:15:00) [4]
> Arx (12.08.07 22:07) [3]
> не правильно их создаю.
Возможно, что правильно было бы почитать хотя бы это
http://groups.google.com/group/borland.public.delphi.vcl.components.using/msg/3b9bce864c6dfb49
--
Regards, LVT.
Kostafey (2007-08-12 22:14:00) [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;
Германн (2007-08-12 22:11:00) [6]
> Объект "Имя" я создаю заново каждый раз, и боюсь это не
> правильно...
>
Неправильно что переменная, в которой хранится адрес созданного объекта одна единственная.
Arx (2007-08-12 22:07:00) [7]Понятно всё кроме этого самого "перебора", у меня получается работать только с последним созданным объектом. Я возможно не правильно их создаю.
Var
Имя: Класс (созданный мной)
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Имя:=Класс.Create;
//X, Y становятся свойствами объекта "Имя", рисуется квадрат.
end;
Объект "Имя" я создаю заново каждый раз, и боюсь это не правильно...
Kostafey (2007-08-12 21:52:00) [8]> при клике левой кнопкой мыши на форму объект, например квадрат
> (нарисованный в Canvas)
В конструкторе описать рисование квадрата,
в свойства - его координаты.
> при клике правой кнопкой мыши на любом уже созданном объекте
> объект исчезал
Ловим координаты мышки, перебираем свойства созданных объектов.
В деструкторе рисуем на том же месте квадрат малевича :)
Если объет создавался на основе какого-нибудь shape, то это даже не понадобится.
> Позже, хотелось бы освоить взаимодействия объектов, например,
> когда один объект касается другово такого-же, оба исчезают.
Тоже все решается перебором.
Leonid Troyanovsky (2007-08-12 21:10:00) [9]
> Arx (12.08.07 20:03)
> Задача такая: создать программу, которая создавала бы при
> клике левой кнопкой мыши на форму объект, например квадрат
> (нарисованный в Canvas), а при клике правой кнопкой мыши
Поищи у себя на компе graphex.dpr.
Это - про левую кнопку.
Ну, а про правую, надо почитать книжечку к.л. по OOP Delphi.
--
Regards, LVT.