Пишу небольшую программку для ускорения расчета конструкций.
Программа считает и выводит результаты расчета на компонент 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;
Хотя второе, может и лишнее.
Но все-равно, понять не могу, почему в первоначальном варианте не работало...





