繁体   English   中英

在 Delphi 7 上调整图像大小

[英]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() ,请执行以下操作:

  1. 确保您在 Object 检查员中选择了表格
  2. Select 事件选项卡
  3. 找到OnPaint事件
  4. 双击右侧栏

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM