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