Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 19:34   #1
Krendel'
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 36
По умолчанию Можно ли создать 2 разных bitmap'а на одном Canvas'е ?

собственно, ситуация такая: есть Image, на котором рисуется график (нормальная линия psSolid), еще я хочу добавить на этот же Image фоновую сетку, которая будет иметь прерывистую линию (psDash)

Код:
with Image1.picture.bitmap.Canvas do begin
  pen.style   := psSolid;
  pen.Color   := clWhite;
  brush.style := bsSolid;
  brush.color := 0;
..
Image1.picture.bitmap.Canvas.MoveTo(0, Image1.Height);
 for i:=0 to mmm - 1 do begin
  X := Round(i*Image1.Width/mmm);
  Y := (Image1.Height - mmm[i]);
  Image1.picture.bitmap.Canvas.LineTo(X, Y);
потом рисую сетку

Код:

// x
    Image1.picture.bitmap.Canvas.MoveTo(50, 0);
 Image1.picture.bitmap.Canvas.LineTo(50,400);
  Image1.picture.bitmap.Canvas.MoveTo(100, 0);
 Image1.picture.bitmap.Canvas.LineTo(100,400);
   Image1.picture.bitmap.Canvas.MoveTo(150, 0);
 Image1.picture.bitmap.Canvas.LineTo(150,400);
  Image1.picture.bitmap.Canvas.MoveTo(200, 0);
 Image1.picture.bitmap.Canvas.LineTo(200,400);
   Image1.picture.bitmap.Canvas.MoveTo(250, 0);
 Image1.picture.bitmap.Canvas.LineTo(250,400);
  Image1.picture.bitmap.Canvas.MoveTo(300, 0);
 Image1.picture.bitmap.Canvas.LineTo(300,400);
   Image1.picture.bitmap.Canvas.MoveTo(350, 0);
 Image1.picture.bitmap.Canvas.LineTo(350,400);
  Image1.picture.bitmap.Canvas.MoveTo(400, 0);
 Image1.picture.bitmap.Canvas.LineTo(400,400);
   Image1.picture.bitmap.Canvas.MoveTo(450, 0);
 Image1.picture.bitmap.Canvas.LineTo(450,400);
   Image1.picture.bitmap.Canvas.MoveTo(500, 0);
 Image1.picture.bitmap.Canvas.LineTo(500,400);
   Image1.picture.bitmap.Canvas.MoveTo(550, 0);
 Image1.picture.bitmap.Canvas.LineTo(550,400);
  Image1.picture.bitmap.Canvas.MoveTo(600, 0);
 Image1.picture.bitmap.Canvas.LineTo(600,400);
   Image1.picture.bitmap.Canvas.MoveTo(650, 0);
 Image1.picture.bitmap.Canvas.LineTo(650,400);

// y
   Image1.picture.bitmap.Canvas.MoveTo(0, 50);
 Image1.picture.bitmap.Canvas.LineTo(1000,50);
  Image1.picture.bitmap.Canvas.MoveTo(0, 100);
 Image1.picture.bitmap.Canvas.LineTo(1000,100);
   Image1.picture.bitmap.Canvas.MoveTo(0, 150);
 Image1.picture.bitmap.Canvas.LineTo(1000,150);
    Image1.picture.bitmap.Canvas.MoveTo(0, 200);
 Image1.picture.bitmap.Canvas.LineTo(1000,200);
    Image1.picture.bitmap.Canvas.MoveTo(0, 250);
 Image1.picture.bitmap.Canvas.LineTo(1000,250);
но она имеет такой же тип линий, а как задать ей отрисовку psDash - не знаю
Krendel' вне форума Ответить с цитированием
Старый 23.05.2011, 20:35   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Поиграйся с Pen.Style и
If the current Pen does not have a style of psSolid, the line is drawn with a background specified by the current brush
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2011, 21:48   #3
Krendel'
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 36
По умолчанию

Аватар, если менять Pen.Style на psDаsh, то изменится и тип линий, которым рисуется главный график

вот и хочу узнать как можно сделать их независимыми друг от друга
Krendel' вне форума Ответить с цитированием
Старый 23.05.2011, 22:07   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
если менять Pen.Style на psDаsh, то изменится и тип линий, которым рисуется главный график
Чего ради? Прорисовав главный график перед прорисовкой сетки настроить Pen.Style. Попробуйте, на то что было нарисовано ранее это не повлияет
Кстати сеточку тоже не мешало бы в цикле сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.05.2011 в 22:13.
Аватар вне форума Ответить с цитированием
Старый 25.05.2011, 23:47   #5
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

я вам намекну, надеюсь поймете =)
ваш код, частично:

pen.style:=psSolid; // установили тип карандаша как "прямая линия"
Image1.picture.bitmap.Canvas.LineTo (X, Y); // нарисовали график прямой линией

потом рисую сетку

Image1.picture.bitmap.Canvas.LineTo (50, 0); // что не так?

вопрос к вам: с чего бы вдруг прога, если ей сказали рисовать прямой линией, будет рисовать пунктиром?

может потому что вы вставили коммент "а сейчас я рисую сетку!" ? ))

вобщем все правильно у вас, вы что сказали нарисовать, то вам и нарисовали.

pen.style:=psSolid;
//рисуем график

pen.style:=psDash;
//рисуем сетку

кстати, я бы на вашем месте сначала рисовал сетку...
а еще (не проверял как будет смотреться, но по-моему хреново) я бы не стал рисовать сетку пунктиров, или что там у вас?
попробуйте лучше нарисовать ее другим цветом, например, серым, и линию потоньше, например 1 px, а сам график - черным и толщиной 2 px
насколько я могу представить, это смотрелось бы лучше, чем пунктир или точки

Последний раз редактировалось xrob; 25.05.2011 в 23:55.
xrob вне форума Ответить с цитированием
Старый 26.05.2011, 08:55   #6
Krendel'
Пользователь
 
Регистрация: 13.11.2008
Сообщений: 36
По умолчанию

Аватар, xrob, возможно у меня код кривой, но вся штука в том, что если я указываю сначала тип линий Dash для сетки и рисую ее, то даже если потом указать тип Solid для основного графика, то он все равно рисуется прерывистой линией

я понял что вы хотите сказать, я и сам уже так делал, но видимо неправильно прописал все это, не происходит смена типа линий

поэтому и спрашивал, можно ли сделать отдельный битмап, думая что для него можно указать свой тип линий
Krendel' вне форума Ответить с цитированием
Старый 26.05.2011, 09:37   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Наложить можно поверх друг друга хоть сотню Image (не битмапов), правильно управляя при этом прозрачностью. Даже интересно стало какие у вас проблемы, никогда не сталкивался с подобным. Проект или хотя бы форму можете выложить сюда? И с какими дельфями работаете?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.05.2011, 10:40   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Обратите внимание на brush.color := 0; Из-за этого промежутки в пунктирной линии и заполняются черным цветом - в результате сплошная линия
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.04.2012, 19:51   #9
OlegPrograming5
Пользователь
 
Регистрация: 12.01.2009
Сообщений: 42
По умолчанию

А почему сетка рисуется не циклом?
OlegPrograming5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одновременное выполнение разных процедур в одном файле? gramp Microsoft Office Excel 15 25.03.2011 12:15
Как можно создать графический редактор где можно с помощю циркуля рисовать круг, а с линейки чертитьлинию Aksuubai Общие вопросы Delphi 3 03.06.2010 19:18
поля из разных связных таблиц в одном dbgrid Geddar Помощь студентам 2 15.05.2008 16:57
можно ли в одном классе реализовать несколько интерфейсов Galinka08 Общие вопросы по Java, Java SE, Kotlin 2 08.03.2008 21:33
Можно ли в ListBox шрифт в одном Item сделать жирным, а в другом обычным? Washington Компоненты Delphi 9 28.03.2007 12:43