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

Вниз

Помогите с созданием класса   Найти похожие ветки 

 
interandry ©   (2007-08-03 14:59) [0]

Добрый день!!! Вопрос вот ч чем.
Есть форма с PaintBox - необходимо реализовать класс визуального компонента для того что бы после клика на PaintBox этот компонент прорисовался на PaintBox.


 
Сергей М. ©   (2007-08-03 15:02) [1]

И чем же тебе помочь ?


 
JanMihail ©   (2007-08-03 19:00) [2]

Зачем тебе класс. Просто при нажатии на PaintBox найди на не м все компоненты и перерисуй. FindComponent или EnumWindows()


 
interandry ©   (2007-08-03 22:45) [3]

Спасибо за ответы. Дело в том что мне надо создать класс компонента ну например опоры (теор-мех). При нажатии на кнопку на панели должен создаваться этот класс а при клике по PaintBox прорисовываться в указаном месте. Вообще мне надо сделать что то типа P-CADa или подобного. Вот скрин того что должно быть http://zagrebay2007.narod.ru/Screen.JPG


 
ЮЮ ©   (2007-08-04 09:21) [4]


> необходимо реализовать класс визуального компонента для
> того что бы после клика на PaintBox этот компонент прорисовался
> на PaintBox


Если компонент визуальный, то причем здесь PaintBox и клик на нем. Он должен рисоваться на "себе", типа TShape.
Если невизуальный, то должен иметь метод типа Draw(ACanvs: TCanvar; ARect: TRect; ...), т.е. уметь рисовать себя на любом канвасе, будь то канвас TPaintBox-а, или TBitnap или TPrinter


 
interandry ©   (2007-08-05 01:05) [5]

Большое спасибо. Вот только попробывал - ПОЛУЧИЛИСЬ!!! Еще раз спасибо огромное.
Я сделал как предложил ЮЮ - на основе не визуального класса.
Но у меня встречный вопрос - для не визуальный компонентов возможно реализовать ракцию на мышку, клавиатуру, и определять находится курсор над этим компонентом.
Заранее благодарю!!!!!
ЗЫ. Как мед так и ложкой. :)


 
{RASkov} ©   (2007-08-05 01:16) [6]

> [5] interandry ©   (05.08.07 01:05)
> Но у меня встречный вопрос - для не визуальный компонентов
> возможно реализовать ракцию на мышку, клавиатуру, и определять
> находится курсор над этим компонентом
.
> Заранее благодарю!!!!!

Что ты имеешь ввиду? Если он невизуальный, то ..... вообщем как это - (невизуальный) и (находится ли над ним курсор)??
Может тебе стоит свою изначальную задачу подробнее объяснить...А?


 
interandry ©   (2007-08-05 11:19) [7]

Добрый день!!
Из+ачально задача состоит в то что бы создать некий редактор, аля P-CAD или ему подобный. http://zagrebay2007.narod.ru/Screen.JPG
1. Кликаем по кнопке на панели соответствующего элемента (опора, балка...)
2. Кидаем его на холст редактора (канва)
3. При необходимости двигаем его по холсту мышкой
Примерно так.
По совету
> Если компонент визуальный, то причем здесь PaintBox и клик
> на нем. Он должен рисоваться на "себе", типа TShape.Если
> невизуальный, то должен иметь метод типа Draw(ACanvs: TCanvar;
>  ARect: TRect; ...), т.е. уметь рисовать себя на любом канвасе,
>  будь то канвас TPaintBox-а, или TBitnap или TPrinter

я сделал так что мой класс прорисовывает себя на канве, но вкралось такое подозрение что если содать класс на основе не визуального компонента, функциональность на этом и заканчивается.

Извините за костноязычность :(
Заранее спасибо.


 
{RASkov} ©   (2007-08-05 22:49) [8]

> [7] interandry ©   (05.08.07 11:19)

Можно, например, реализовать коллекцией
где CollectionItem"ом будет "фигура" прорисовываемая на общей, для всех "фигур", канве...
В элементе хранить параметры рисования, такие как Left, Top, Width, Height, Кисть, Перо и все что нужно еще...
При прорисовке делать нечто так:
for N:= 0 to Collection.Count-1 do begin
 Canvas.Pen.Assign(Item[N].Pen);
....
 Item[N].Draw(Canvas);
end;

Причем Канву лучше использовать не Паинтбокса, а Битмапа, а на OnPaint PainBox"а BitBlt с канвы битмапа на паинтбокс....
для перемещения элемента можно менять left и top выделенного Item"a...
Мышь можно проверять PtInRect или PtInRegion....
В общем идея такая....


 
Двигатель внешнего сгорания   (2007-08-05 23:04) [9]


> interandry ©   (05.08.07 11:19) [7]


С классом идея правильная.

Попробуй классический метод:

1. Создай абстрактный класс, например TFigure с абстрактным методом Paint.
2. Каждый наследник TFigure имеет собственный набор свойств и перекоывает метод Paint, т.е. умеет себя отрисовывать самостоятельно.

Например:

TFigure=class
 FCanvas: TCanvas;
private
 procedure Paint; abstract;
public
 constructor Create(Canvas: TCanvas);
 procedure Draw;
end;

TSquare=class(TFigure)
 FRect: TRect;
private
procedure Paint;
end;

TСircle=class(TFigure)
 FRect: TRect;
private
procedure Paint;
end;

implementation

constructor TFigure.Create(Canvas: TCanvas);
begin
 FCanvas := Canvas;
end;

procedure TSquare.Paint;
begin
 FCanvas.Rectangle(FRect);
end;

procedure TСircle.Paint;
begin
 FCanvas.Ellipse(FRect);
end;


Каждая фигура прорисовывает себя на канве, используя public-метод Draw.



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
15-1185958814
Vlad Oshin
2007-08-01 13:00
2007.08.26
работа, программист


15-1185207715
Aleksandre
2007-07-23 20:21
2007.08.26
Требуется программист на работу


2-1185865906
vegarulez
2007-07-31 11:11
2007.08.26
Вопрос про отправку мыла.


8-1163478013
Tab
2006-11-14 07:20
2007.08.26
квадрат с вращением в OpenGL


2-1186293267
Zagaevskiy
2007-08-05 09:54
2007.08.26
тут я чайник полный:)