[英]Resize Image on Delphi 7
我无法调整图像的大小,它说没有声明的标识符,尽管事实上在代码中间它被声明并且不被视为错误,但最后它给出了这个,我知道我需要最后写一个结尾。 但这根本无济于事。 请帮忙。 我接受此错误的任何解决方案。
// Функция для графического представления
function f(x:real):real;
begin
f:=2*sin(x)*exp(x/5)
end;
// процедура построения графика
procedure GrOfFunc;
var x1,x2, // границы изменения аргумента функции
y1, y2, // границы изменения значения функции
x, // аргумент функции
y, // значение функции в точке х
dx:real; // приращение аргумента
l,b:integer; //левый нижний угол области вывода графика
w,h:integer; // ширина и высота области вывода графика
mx,my:real; // масштаб по осям x и y
x0,y0:integer; // точка - начало координат
n,sh,s:integer; // число еденичных меток на осях
begin
// Расчет области вывода графика
l:=20;
b:=Form1.ClientHeight-20; // y-координата левого нижнего угла
h:=Form1.ClientHeight-40; // высота
w:=Form1.ClientHeight-40; // ширина
x1:=-10; // нижняя граница диапазона аргумента
x2:=10; // верхняя граница диапазона аргумента
dx:=0.01; // шаг аргумента
// Вычисление максимального и минимального значения
// функции на отрезке [x1,x2]
y1:=f(x1); // переменная для минимума
y2:=f(x2); // переменная для максимума
x:=x1;
repeat
y:=f(x);
if y<y1 then y1:=y;
if y>y2 then y2:=y;
x:=x+dx;
until (x>=x2);
// Вычисление масштаба
my:=h/abs(y2-y1); // масштаб по оси Y
mx:=w/abs(x2-x1); // масштаб по оси X
x0:=l+abs(Round(x1*mx)); // положение начала
y0:=b-abs(Round(y1*my)); // координат
// Рисование и разметка осей координат
with Form1.Canvas do
begin
MoveTo(x0,b); LineTo(x0,b-h); // рисуем ось Y
MoveTo(l,y0); LineTo(l+w,y0); // рисуем ось X
// Разметка оси OY
TextOut(x0+5,b-h,FloatToStrF(y2,ffGeneral,6,3)); // нанесем
//на ось Y MAX
TextOut(x0+5,b,FloatToStrF(y1,ffGeneral,6,3)); // и min
// значение функции
n:=Round(Form1.ClientHeight/40); // количество меток
if (y2-y1)<100 then // подбираем шаг расстановки меток
// в зависимости от диапазона
// изменение значение функции
begin
sh:=round((y2-y1)/n);
s:=round(y1);
end
else
begin
sh:=(Round((y2-y1)/n) div 10)*10; // выделим только десятки
s:=(Round(y1) div 10)*10
end;
repeat
MoveTo(Round(x0-2), Round(y0+s*my)); // рисуем риски
// меток
LineTo(Round(x0+2), Round(y0+S*my)); // и приставляем числа
TextOut(x0-30,Round(y0-5+s*my),
FloatToStrF(-l*S,ffGeneral,6,3));
S:=s+sh;
until (s>y2);
// Разметка оси OX
n:=Round(w/40);
if (x2-x1)<100
then // аналогично для оси X
begin
sh:=Round((x2-x1)/n);
s:=Round(x1)
end
else
begin
sh:=(Round((x2-x1)/n) div 10)*10;
s:=(Round(x1) div 10)*10
end;
repeat
MoveTo(Round(x0+s*mx),y0-2);
LineTo(Round(x0+s*mx),y0+2);
TextOut(Round(x0-5+s*mx),y0+15,
FloatToStrF(S,ffGeneral,6,3));
S:=S+sh;
until (s>x2);
// ПОСТРОЕНИЕ ГРАФИКА ФУНКЦИИ
x:=x1;
repeat
y:=f(x);
// Закрашенивание точки графической сетки красным цветом
Pixels [x0+Round(x*mx),y0-Round(y*my)]:=clRed;
x:=x+dx;
until (x>=x2);
end;
end;
// Запцск построения графика с открытием формы
Procedure TForm1FormPaint(Sender: TObject);
begin
GrofFunc;
end;
// Перерисоувывание графика с изменением размера формы
Procedure TForm1FormResize(Sender: TObject);
begin
// очистить форму
Form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
// построить график
GrofFunc;
end;
end.
当您想为表单分配事件处理程序时,例如OnPaint()
,请执行以下操作:
OnPaint
事件 IDE 将使用 nasme FormPaint()
创建 OnPaint 事件处理程序
TForm1 = class(TForm)
...
procedure FormPaint(Sender: TObject);
,将指向此事件处理程序的链接存储在表单的.dfm
中
并编写一个骨架实现
procedure TForm1.FormPaint(Sender: TObject);
begin
end;
然后你只需填写GrofFunc;
称呼
在OnResize
事件中,您不需要参考表单,因此只需编写:
Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
GrofFunc;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.