Главная страница
    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.107 c
1-1181787504
Yus
2007-06-14 06:18
2007.08.26
Вопрос по шрифтам


2-1186122751
p_evghenii
2007-08-03 10:32
2007.08.26
Как подождать завершения чужого процесса


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


2-1185727193
mfender
2007-07-29 20:39
2007.08.26
TADOConnection. Запуск редактора строки подключения


15-1185649384
Poed
2007-07-28 23:03
2007.08.26
Помогите выбрать IDE для проведения олимпиад.





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