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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
15-1185907434
ArtemESC
2007-07-31 22:43
2007.08.26
Вопросик маленький


2-1186371548
delphino
2007-08-06 07:39
2007.08.26
Обновление данных


3-1178515489
dolmat
2007-05-07 09:24
2007.08.26
ADO избавиться от пароля


15-1185783063
AlinaVK
2007-07-30 12:11
2007.08.26
Перевод проекта на .Net


2-1185950827
Mishenka
2007-08-01 10:47
2007.08.26
Не переписывается метод SetWidth





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский