Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 дней с момента отправки ответа)

Приложение:
  1. procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  2. Shift: TShiftState; X, Y: Integer);
  3. begin
  4. Image1.Canvas.Brush.Color:=ColorBox1.Selected;
  5. Image1.Canvas.Brush.Style:=bsSolid;
  6. Image1.Canvas.FloodFill(X,Y,Canvas.Pixels[X,Y],fsSurface);
  7. 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

Dron (статус: Студент), 24 июля 2007, 13:43 [#43]:

Цитата:

> Кстати а вы все на делфи 7 работаете или у когото BDS?

Соглашусь с Вадимом. То же самое - установлено всё, что только может пригодиться :-)
С уважением.
min@y™

min@y™ (статус: Доктор наук), 25 июля 2007, 08:13 [#44]:

Ты мои исходники-то смотрел? Там есть и заливка, и карандаш и прочие инструменты. Или я зря траффик потратил?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Аксион

Аксион (статус: 4-ый класс), 25 июля 2007, 11:59 [#45]:

Смотрел, только он тоже у меня не работает.
Аксион

Аксион (статус: 4-ый класс), 25 июля 2007, 12:00 [#46]:

я имею ввиду заливка
min@y™

min@y™ (статус: Доктор наук), 26 июля 2007, 08:16 [#47]:

Странно, у меня работает, как и должно быть...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

31 января 2011, 19:56: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Страницы: [« Предыдущая] [1] [2] [3]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:16
Выполнено за 0.03 сек.