|
Вопрос # 778/ вопрос решён / |
|
Уважаемые эксперты!Я делая графический редактор.Мне надо сделать еще 2 инструмента карандаш и ведёрко (заливка) как это осуществтиь и если можно то пришлите исходник.
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 23 июля 2007, 14:04
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Матвеев Мефодий Олегович!
Сделать карандаш просто. Наиболее просто способ в MouseMove проверять нажата ли клавиша мыши и если да, то рисуем точку в координатах мыши. Где то так
if ssleft in Shift then Canvas.Pixels[x,y]:=clBlack;
Но есть недостаток у этого способа. Если мышь быстро провести, то будет не линия... (попробуйте сами)
можно сделать более хитро.
заводим глобальные переменную
var isMouseDown:boolean;
теперь пишем обработчик нажатия мыши для формы или на чём вы там рисуете
procedure MouseDown.....
begin
Isdown:=true;
Canvas.MoveTo(x,y);
Обработчик перемещения мыши
procedure MouseMove.....
begin
if Isdown then
Canvas.LineTo(x,y);
и отпускания
procedure MousUp.....
begin
Isdown:=False;
Для организации заливки достаточно воспользоваться функцией
Canvas.FloodFill(x,y,color,стиль)
стили есть такие
fsSurface
fsBorder
Они определяют, как именно будет заливаться область. Читайте справку и/или эксперементируйте.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 июля 2007, 14:16
Оценка за ответ: 5
Комментарий к оценке: Пасибки да и насчёт FloodFill в прошлый раз я так и делал но ничего не вышло, попозже ещё раз попробую
|
Ответ #2. Отвечает эксперт: Градов Ю.М.
Здравствуйте, Матвеев Мефодий Олегович!
Я оставил Вам исходники двух Paint на http://slil.ru/24656495 около 15 кб
 |
Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 23 июля 2007, 19:04
Оценка за ответ: 4
Комментарий к оценке: Градов Ю.М. спасибо но ни в том ни в другом примере нет метода FloodFill, а жаль
|
Ответ #3. Отвечает эксперт: Dron
Здравствуйте, Матвеев Мефодий Олегович!
Заливка делается методом FloodFill() на Canvas. Работает эта вещь немного хитро. Методу передаются 4 параметра: координаты X и Y - точка начала заливки, "опорный" цвет и режим заливки. Опорный цвет - это не цвет заливки, не нужно путать. Режим заливки - fsBorder, либо fsSurface. fsBorder делает заливку до тех пор, пока не найдётся точка с опорным цветом - на ней заливка остановится. fsSurface заливает ту часть, цвет которой совпадает с опорным цветом, т.е. заливка в этом случае останавливается при нахождении любого другого цвета. В графическом редакторе, конечно, нужно использовать fsSurface, т.к. заливается область одного цвета, а какого цвета граница заранее неизвестно. Программа-пример в прикреплённом файле. Удачи! К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
Приложение: Переключить в обычный режим- procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- Image1.Canvas.Brush.Color:=ColorBox1.Selected;
- Image1.Canvas.Brush.Style:=bsSolid;
- Image1.Canvas.FloodFill(X,Y,Canvas.Pixels[X,Y],fsSurface);
- end;
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 23 июля 2007, 20:01
Оценка за ответ: 5
Комментарий к оценке: Нет я болдею ваш пример работает, но когда я написал тогже самое в своём приложении ничего не произошло... опять.... ладно буду разбираться
|
Ответ #4. Отвечает эксперт: min@y™
Добавлю конкретный примерчик. Писал я 4 года назад одну курсовую подруге... Графредактор. Delphi 6 или 7, уже не помню. Но исходник сохранился. Попробую прицепить к ответу. Там комментарии ПОДРОБНЕЙШИЕ!! К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 24 июля 2007, 08:16
Оценка за ответ: 5
Комментарий к оценке: Спасибо
|
Мини-форум вопроса
Всего сообщений: 47; последнее сообщение — 26 июля 2007, 08:16; участников в обсуждении: 4.
Страницы: [« Предыдущая] [1] [2] [3]
|
Аксион (статус: 4-ый класс), 24 июля 2007, 13:05 [#41]:
Кстати а вы все на делфи 7 работаете или у когото BDS?
|
|
Вадим К (статус: Академик), 24 июля 2007, 13:09 [#42]:
А мы и на 7 и на 2006, и на 2007, и на Lazarus\'е. Инструмент по потребностям
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Dron (статус: Студент), 24 июля 2007, 13:43 [#43]:
Цитата:
> Кстати а вы все на делфи 7 работаете или у когото BDS?
Соглашусь с Вадимом. То же самое - установлено всё, что только может пригодиться
С уважением.
|
|
min@y™ (статус: Доктор наук), 25 июля 2007, 08:13 [#44]:
Ты мои исходники-то смотрел? Там есть и заливка, и карандаш и прочие инструменты. Или я зря траффик потратил?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Аксион (статус: 4-ый класс), 25 июля 2007, 11:59 [#45]:
Смотрел, только он тоже у меня не работает.
|
|
Аксион (статус: 4-ый класс), 25 июля 2007, 12:00 [#46]:
я имею ввиду заливка
|
|
min@y™ (статус: Доктор наук), 26 июля 2007, 08:16 [#47]:
Странно, у меня работает, как и должно быть...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
31 января 2011, 19:56: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Страницы: [« Предыдущая] [1] [2] [3]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|