Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.056 c
2-1186484647
kotbazilio
2007-08-07 15:04
2007.09.02
StringToWideChar


10-1136807222
yanker
2006-01-09 14:47
2007.09.02
управление через OLE


8-1164166516
Tab
2006-11-22 06:35
2007.09.02
Совместное использование OpenGL и VCL компонент


2-1186723135
Savek
2007-08-10 09:18
2007.09.02
TDBGrid.OnMouseDown


2-1186835096
Ivolg
2007-08-11 16:24
2007.09.02
Про WebBrowser





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский