Экспертная система 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-ый класс), 23 июля 2007, 20:06 [#21]:

Реализовал: пипетку, стирку, круг, квадрат, линию, вставку текста, вставку картинки, отменить, повторить, фото экрана и др.
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:08 [#22]:

Dron я ваш ответ не заметил и еще не читал :), но сейчас прочитаю.
Dron

Dron (статус: Студент), 23 июля 2007, 20:09 [#23]:

А круг, квадрат, линия - резиновые? Т.е. ещё не отпускать кнопку мыши и двигать курсор, они меняют очертания?
А ответ я отправил только что...
С уважением.
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:19 [#24]:

>>А круг, квадрат, линия - резиновые? Т.е. ещё не отпускать кнопку мыши и двигать курсор, они меняют очертания?
я не понял вопрос
Dron

Dron (статус: Студент), 23 июля 2007, 20:26 [#25]:

Допустим, я хочу нарисовать прямоугольник. Выбираю инструмент, перемещаю курсор в нужную точку и нажимаю кнопку мыши, а затем начинаю растягивать свой прямоугольник, чтобы его нарисовать. У вас он таким способом рисуется?

А насчёт того, что мой пример работает, а у вас нет - проверьте, что фигура замкнутая, что цвет правильно задан.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:31 [#26]:

Я щас упаду со стула dron я в вашем примере изменил fsSurface на fsBorder и у меня всё заработало!!!!!!!!!!!!!!!!
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:32 [#27]:

>>Допустим, я хочу нарисовать прямоугольник. Выбираю инструмент, перемещаю курсор в нужную точку и нажимаю кнопку мыши, а затем начинаю растягивать свой прямоугольник, чтобы его нарисовать. У вас он таким способом рисуется?

Да метод рисования такой
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:36 [#28]:

Хотя кое что всё еще глючит
Dron

Dron (статус: Студент), 23 июля 2007, 20:42 [#29]:

Цитата:

> Я щас упаду со стула dron я в вашем примере изменил fsSurface на fsBorder и у меня всё заработало!

Даже если и так, этот способ неверн для графического редактора. Если, к примеру, нарисовать окружность так, что половина "ниточки" будет, к примеру, красного цвета, а другая - синего, то fsBorder зальёт лишнюю область (а то и весь рисунок). Поэтому вам лучше разобраться. Скорее всего, вы перепутали цвета.

Цитата:

> Да метод рисования такой

Уверен на 90%, что вы его откуда-то скопировали, потому что тот же карандаш реализовать во много раз проще. Я не осуждаю, просто "мысли вслух"...
С уважением.
Аксион

Аксион (статус: 4-ый класс), 23 июля 2007, 20:47 [#30]:

Нет не скопировал а карандаш я делал сначало сам но он у меня глючил режим включался но после выключения повторно включался уже с глюком и не выключался
Dron

Dron (статус: Студент), 23 июля 2007, 20:51 [#31]:

Если это так, то это может только радовать :-)

Кстати, может быть представите общественности что-нибудь из своих трудов? До этого программа с информацией о системе была, сейчас графический редактор... Интересно всё-таки, что у начинающего программиста получается...
С уважением.
Аксион

Аксион (статус: 4-ый класс), 24 июля 2007, 09:55 [#32]:

>>>Кстати, может быть представите общественности что-нибудь из своих трудов? До этого программа с информацией о системе была, сейчас графический редактор... Интересно всё-таки, что у начинающего программиста получается...
Как представить?(Вообще уменя есть 2 классные программы)

>>>программа с информацией о системе была
Насчёт этой программы неповерите насамом деле мне надобыло только одно как определить системку ХР или Виста, а потом я подумал и решил вывидать у вас как можно узнать и другую инфу, распостронять, а уж темболее продавать эту программу я не буду (с железом я ещё мало знаком)
Dron

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

Цитата:

> Как представить?(Вообще уменя есть 2 классные программы)

Отправьте на сайт например (в разделе "Файловый архив" есть ссылка "Добавить файл").

Цитата:

> Насчёт этой программы неповерите насамом деле мне надобыло только одно как определить системку ХР или Виста, а потом я подумал и решил вывидать у вас как можно узнать и другую инфу, распостронять, а уж темболее продавать эту программу я не буду (с железом я ещё мало знаком)

Так значит вы забросили её разработку?
С уважением.
Аксион

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

Так я и не начинал я же сказал >>мне надо было только одно как определить системку ХР или Виста

А пока те 2 программы я ещё дорабатывая в одной уже багов нет, а вот в другой....
Аксион

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

Нет всё я сдаюсь этот долбаный FloodFill при Surface не работает!!!!!!!! При Border всё болеемение правда если замкнутая граница разного цвета то заливается весь рисунок.........Всё щас вешаться пойду!
Вадим К

Вадим К (статус: Академик), 24 июля 2007, 12:30 [#36]:

ну так надо ручками зарисовку написать. можно даже рекурсивно. Благо дело не сложно.
>>Всё щас вешаться пойду!
Что за суицидные наклонности.
Галочка "подтверждения прочтения" - вселенское зло.
Аксион

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

>> ну так надо ручками зарисовку написать
Не могу дотянуться до клавы - люстра от компа долеко
Вадим К

Вадим К (статус: Академик), 24 июля 2007, 12:44 [#38]:

Это не ко мне, это к хирургу и патологоанатому
Галочка "подтверждения прочтения" - вселенское зло.
Аксион

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

Ладно попробую разобратся но чесно у вас работает - у меня нет - не справедливо
Dron

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

Цитата:

> Ладно попробую разобратся но чесно у вас работает - у меня нет - не справедливо

Компьютеру всё равно, чья это программа - как написано, так и оно и работает. Поэтому не нужно никого обвинять - программа ваша, вы в ней и ошибок напортачили.
А помочь мы вам вряд ли чем-то ещё сможем. Разве что вы исходники своего редактора представите.
С уважением.

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

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

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