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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 3 065

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Хочу, чтобы у меня картинка выделялась в рамочку. Обрабатываю событие по щелчку на картинке. Пишу следующий код:

Image1.Canvas.Brush.Color:=clblue;
Image1.Canvas.FrameRect(image1.Canvas.ClipRect);

В итоге рамочка получается тоненькая-тоненькая. Как изменить толщину рамки?

Спасибо.

MirrorTata Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: MirrorTata (статус: Посетитель)
Вопрос отправлен: 4 августа 2009, 15:02
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, MirrorTata!
А потому что frameRect и рисует тонкую. Самый надежный метод - нарисовать самому. Код такой

Image1.Canvas.Pen.Color:=clblue;
Image1.Canvas.Pen.width :=10;
Image1.Canvas.MoveTo(0,0); //переместить карандаш рисования в данную точку
Image1.Canvas.LineTo(0,Height); //и рисовать до этой, получиться левая сторона
Image1.Canvas.LineTo(Width,Height);//а теперь до этой, получиться вверх
Image1.Canvas.LineTo(Width,0);//это правая сторона
Image1.Canvas.LineTo(0,0); //и подводим до начальной точки, это низ.
Толщину/цвет подбираем по вкусу. координаты в скобках возможно нужно будет подкорректировать, например уменьшить/увеличить на толщину линии, что бы создать красивую рамку. Или повторить код дважды....

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 4 августа 2009, 15:17
Оценка за ответ: 4

Комментарий к оценке: Дважды прописать код, рисовать всё самой - это-то как раз без проблем.
Это всё можно было бы сделать.

Я как раз и спрашиваю потому, что не хочется дважды код повторять или рисовать линии вручную.

Ответ #2. Отвечает эксперт: Dron

Здравствуйте, MirrorTata!
Через FrameRect нарисовать линию большей толщины не получится. Но никто не мешает использовать Rectangle. Только здесь уже нужно менять параметры Pen, а заливку (Brush) временно отключить. Пример:

with Image1.Canvas do
begin
  Pen.Color:=clblue;
  Pen.Width:=5;
  Brush.Style:=bsClear;
  Rectangle(ClipRect);
end;
В итоге имеем рамку толщиной 5px.

Ответ отправил: Dron (статус: Студент)
Время отправки: 4 августа 2009, 15:54
Оценка за ответ: 5

Комментарий к оценке: Кажется, это именно то, что я и хотела... Спасибо!
Побежала проверять....

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 4 августа 2009, 15:41; участников в обсуждении: 1.
Вадим К

Вадим К (статус: Академик), 4 августа 2009, 15:41 [#1]:

А почему не написали, что могу линиями нарисовать, но не хочеться? Почему нужно угадывать, что хочеться?
Можно (и нужно) код завернуть в процеду и вызывать когда надо.
"повторить код дважды" - это не значит в буквальном смысле скопипастить.
Галочка "подтверждения прочтения" - вселенское зло.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.03 сек.