[Решено] Не очищается канва

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

[Решено] Не очищается канва

Сообщение Iv_ » 14.02.2012 09:05:43

Добрый день.
Пишу небольшую программку для ускорения расчета конструкций.
Программа считает и выводит результаты расчета на компонент TImage.
При повторном расчете результаты наслаиваются друг на друга, хотя очистку канвы перед рисованием я делаю
Код: Выделить всё
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.FillRect(Rect(0,0,Width,Height));

Причем для вывода обозначений, типа "A = 20 см2" я использую отдельные процедуры с параметрами.
Если к этим процедурам не обращаться - все работает нормально и канва очищается перед выводом новых результатов, а если использую - канва не очищается. Если не сложно - посмотрите, что у меня не так (понятно, что код кривой, но я как умею, так и пишу, лишь бы работу быстрее делать).
в качестве примера:
Код: Выделить всё
...
//процедура для вывода значений типа A=20см
procedure uni_3 (Cnv: TCanvas; x,y: integer; s,s1,s2: string);
var y1,h,f: integer;
begin
  //устанавливаем нужный стиль шрифта:
  f:=8; //размер шрифта
  with Cnv do
    begin
      Font.Name := 'Tahoma';
      Font.Size := f;
      Font.Color := clWindowText;
     Brush.Style := bsClear;
      end;
  Cnv.TextOut(x,y,s); //выводим основную надпись
  x:=x+Cnv.TextWidth(s);
  Cnv.TextOut(x,y,' = ');
  x:=x+Cnv.TextWidth(' = ');
  Cnv.TextOut(x,y,s1);
  x:=x+Cnv.TextWidth(s1);
  Cnv.TextOut(x,y,s2);
  Cnv.Font.SetDefault; //возвращаем старый стиль шрифта
end;             
...
procedure TForm1.BitBtn1Click(Sender: TObject);
...
  Image1.Canvas.Brush.Color:=clWhite;
  Image1.Canvas.FillRect(Rect(0,0,Width,Height));
  Image1.Canvas.TextOut(ix,iy,'Класс бетона: '+bet);
  Image1.Canvas.TextOut(ix,iy+diy*10,'Класс сжатой арматуры:');
  ...
  uni_3 (Image1.Canvas,ix,iy+diy*17,'x',FloatToStrF(x,ffFixed,5,2),' см');
...


Нашел решение.
убрал из процедур
Код: Выделить всё
Brush.Style := bsClear;

и назначил
Код: Выделить всё
Brush.Color:=clWhite;

Хотя второе, может и лишнее.

Но все-равно, понять не могу, почему в первоначальном варианте не работало...
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: [Решено] Не очищается канва

Сообщение vada » 15.02.2012 10:14:40

О как прикольно! Железобетонное сечение считаем.
Недавно закончил проект "Расчет железобетонного сечения произвольной формы на прочность, трещиностойкость и выносливость при действии продольной силы и изгибающих моментов". (СП 35.13330 "МОСТЫ И ТРУБЫ", ......)

По топику.
У TImage есть такое событие OnPaint. Вот в обработчике события и надо рисовать.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: [Решено] Не очищается канва

Сообщение Iv_ » 16.02.2012 07:04:31

vada писал(а):У TImage есть такое событие OnPaint. Вот в обработчике события и надо рисовать.

Не совсем понял, что именно в этом событии прописывать? Всегда рисовал по нажатию кнопки, причем, порой сразу на нескольких Image... Поясните пожалуйста.
Или имеется ввиду, что всю отрисовку прописывать в событий OnPaint, а потом эту процедуру вызывать по нажатию кнопки?
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: [Решено] Не очищается канва

Сообщение dunin » 16.02.2012 08:51:49

Iv_ писал(а):...
Или имеется ввиду, что всю отрисовку прописывать в событий OnPaint, а потом эту процедуру вызывать по нажатию кнопки?

OnPaint сама вызывается каждый раз при перерисовки формы
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: [Решено] Не очищается канва

Сообщение vada » 16.02.2012 10:25:17

Iv_ Компонент TImage должен уметь сам себя рисовать. Без Вашего вмешательства кнопками. Например, в подобном случае - окно было перекрыто другим окном и потом освободилось от "опеки". Компонент должен перерисоваться. В этом случае инициируется событие OnPaint. Но это не запрещает Вам вызывать метод MySuperSmartImagePaint(CuurSender) и при нажатии кнопки, или еще в каком случае.
Вложения
Screen.JPG
Вот примерно такая картинка :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: [Решено] Не очищается канва

Сообщение Iv_ » 16.02.2012 11:01:41

Благодарствую, vada, за разъяснения. Поэкспериментирую.
Программка у вас интересная, но для меня (в плане написания) сложноватая, мои программы больше на калькуляторы похожи (в институте дали на информатике чуть-чуть Паскаля - им и пользуюсь) : ))
Ваш проект коммерческий, или его можно где-то скачать в свободном доступе?
Iv_
новенький
 
Сообщения: 36
Зарегистрирован: 08.01.2011 22:52:44

Re: [Решено] Не очищается канва

Сообщение vada » 16.02.2012 11:50:55

Мой проект закрытый. Скачать негде. Насколько знаю, аналогов нет. На продажу не планируется. Так называемое "конкурентное преимущество". :wink:
ЗЫ. С продажей, если что, тоже есть проблемы. По лицензии на всяческие библиотеки используемые в проекте я должен и исходники открыть, а там очень много нохау. Руководство на это не пойдет.

ЗЫЫ. Если что-то интересно по методикам расчета могу проконсультировать. Это не запрещено.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru