⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 delphi编程增益曲线绘图
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    RadioGroup1: TRadioGroup;
    SavePictureDialog1: TSavePictureDialog;
    BitBtn4: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure  DrawBlack(nImage:TImage);
    procedure  DraGrapzb(nImage:TImage);
    procedure  DrawGrapdata(nImage:TImage);
  end;

var
  Form1: TForm1;

implementation

var
  totalnum,beishu:Integer;
  YJstr:array[0..6] of String;
  Title:array[0..12] of String;

{$R *.dfm}
procedure TForm1.DrawGrapdata(nImage:TImage);
var
 i,Sx,Sy,Ex,Ey,xhnum,tempx,tempy:Integer;
 ntempfloat:Single;
begin
    nImage.Canvas.Pen.Color:=clRed;
    nImage.Canvas.Pen.Style:=psSolid;
      totalnum:=memo1.Lines.Count;
      if totalnum > 2 then
      begin
         xhnum:= totalnum div 2;
         for i:=0 to xhnum-1 do    //开始绘图
         begin
            try   //读X轴数据
                tempx:=strtoint(Memo1.Lines[2*i])
            except
                ShowMessage('读第:'+Inttostr(2*i)+'行出错。');
                exit;
            end;
            //读Y行数据
            try
               ntempfloat:=strtoFloat(Memo1.Lines[2*i+1]);
            except
                ShowMessage('读第:'+Inttostr(2*i+1)+'行出错。');
                exit;
            end;
            //开始判读数据,并转换
            tempy:=Trunc(ntempfloat);
            if tempy <10 then
            begin
             Ey:=nImage.Top+nImage.Height-50;
            end
            else if  tempy <100 then
            begin
                Ey:=nImage.Top+nImage.Height-50-tempy;
            end
            else if  tempy <1000 then
            begin
              Ey:=nImage.Top+nImage.Height-150-tempy div 10;
            end
            else if  tempy <10000 then
            begin
                Ey:=nImage.Top+nImage.Height-250-tempy div 100;
            end
            else if  tempy >10000 then
            begin
                Ey:=nImage.Top+nImage.Height-350;//-tempy div 1000;
            end;
            //开始绘图
            if RadioGroup1.ItemIndex=2 then
            begin
              Sx:=nImage.Left+50+tempx * beishu ;
            end
            else
            Sx:=nImage.Left+50+tempx div beishu;

            Ex:=Sx;
            Sy:=nImage.Top+nImage.Height-50;
            nImage.Canvas.MoveTo(Sx,Sy);
            nImage.Canvas.LineTo(Ex,Ey);
         end;  // end    for i:=0 to xhnum-2 do    //开始绘图
      end;   // end      if totalnum > 2 then
end;
procedure TForm1.DraGrapzb(nImage:TImage);
var
 Sx,Sy,Ex,Ey,i,SWGHeight,SWGWidth:Integer;
begin
    nImage.Canvas.Pen.Color:=clBlack;
    nImage.Canvas.Pen.Style:=psSolid;
    nImage.Canvas.Font.Color :=clBlack;

    
    //     GWidth:=80;
     SWGHeight:=100;
     SWGWidth:=100;

     nImage.Canvas.Pen.Width :=2;
     //--绘制X轴
     Sx:=nImage.Left +50;
     Sy:=nImage.Top+nImage.Height-50;
     Ex:=nImage.Left+nImage.Width -20;
     Ey:=Sy;
     nImage.Canvas.MoveTo(Sx,Sy);
     nImage.Canvas.LineTo(Ex,Ey);
     nImage.Canvas.MoveTo(Ex,Ey);//绘制X轴箭头
     nImage.Canvas.LineTo(Ex-10,Ey+5);
     nImage.Canvas.MoveTo(Ex,Ey);//绘制X轴箭头
     nImage.Canvas.LineTo(Ex-10,Ey-5);
     nImage.Canvas.TextOut(Ex-20,Ey-20,'X');
     for i:=1 to 11  do //绘制X刻度档位
     begin
      Sx:=nImage.Left +50+i*SWGWidth;
      Ex:=Sx;
      SY:=nImage.Top+nImage.Height-50;
      EY:=Sy-5;
      nImage.Canvas.MoveTo(Sx,Sy);
      nImage.Canvas.LineTo(Ex,Ey);
      nImage.Canvas.TextOut(Ex-10,Ey+10,Title[i-1]);
     end;
     //--绘制Y轴
     Sx:=nImage.Left +50;
     Sy:=nImage.Top+nImage.Height-50;
     Ex:=Sx;
     Ey:=nImage.Top;
     nImage.Canvas.MoveTo(Sx,Sy);
     nImage.Canvas.LineTo(Ex,Ey);
     nImage.Canvas.MoveTo(Ex,Ey);//绘制Y轴箭头
     nImage.Canvas.LineTo(Ex-5,Ey+10);
     nImage.Canvas.MoveTo(Ex,Ey);//绘制Y轴箭头
     nImage.Canvas.LineTo(Ex+5,Ey+10);
     nImage.Canvas.TextOut(Ex+10,Ey,'Y');
     for i:=1 to 3  do //绘制Y刻度档位
     begin
      Sx:=nImage.Left +50;
      Ex:=nImage.Left +55;
      SY:=nImage.Top+nImage.Height-50-i*SWGHeight;
      EY:=Sy;
      nImage.Canvas.MoveTo(Sx,Sy);
      nImage.Canvas.LineTo(Ex,Ey);
      nImage.Canvas.TextOut(Sx-40,Sy-5,YJstr[i]);
     end;
     nImage.Canvas.Pen.Width :=1;

end;
procedure TForm1.DrawBlack(nImage:TImage);
begin
   nImage.Canvas.Pen.Color:=clBlack;
   nImage.Canvas.Pen.Style:=psSolid;
   nImage.Canvas.Rectangle(nImage.Canvas.ClipRect);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
spathstr:String;
begin
   if OpenDialog1.Execute then
    begin
    spathstr:=OpenDialog1.FileName;
    //得文件共有到多少行
    memo1.Lines.LoadFromFile(spathstr);

    end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
    DrawBlack(Image1);
    DraGrapzb(Image1);
    DrawGrapdata(Image1);
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
//初始化
     YJstr[1]:='10E+1';
     YJstr[2]:='10E+2';
     YJstr[3]:='10E+3';
     //初始化X标记
     Title[0]:='100Hz';
     Title[1]:='200Hz';
     Title[2]:='300Hz';
     Title[3]:='400Hz';
     Title[4]:='500Hz';
     Title[5]:='600Hz';
     Title[6]:='700Hz';
     Title[7]:='800Hz';
     Title[8]:='900Hz';
     Title[9]:='1000Hz';
     Title[10]:='1100Hz';
     beishu:=1;
   //  Title[11]:='1200Hz';
     DrawBlack(Image1);
     DraGrapzb(Image1);
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
    if RadioGroup1.ItemIndex=0 then
    begin
     //初始化X标记
     Title[0]:='100Hz';
     Title[1]:='200Hz';
     Title[2]:='300Hz';
     Title[3]:='400Hz';
     Title[4]:='500Hz';
     Title[5]:='600Hz';
     Title[6]:='700Hz';
     Title[7]:='800Hz';
     Title[8]:='900Hz';
     Title[9]:='1000Hz';
     Title[10]:='1100Hz';
     beishu:=1;
    end
    else if RadioGroup1.ItemIndex=1 then
    begin
    //初始化X标记
     Title[0]:='500Hz';
     Title[1]:='1000Hz';
     Title[2]:='1500Hz';
     Title[3]:='2000Hz';
     Title[4]:='2500Hz';
     Title[5]:='3000Hz';
     Title[6]:='3500Hz';
     Title[7]:='4000Hz';
     Title[8]:='4500Hz';
     Title[9]:='5000Hz';
     Title[10]:='5500Hz';
     beishu :=5;
    end
    else
    begin
           //初始化X标记
     Title[0]:='20Hz';
     Title[1]:='40Hz';
     Title[2]:='60Hz';
     Title[3]:='80Hz';
     Title[4]:='100Hz';
     Title[5]:='120Hz';
     Title[6]:='140Hz';
     Title[7]:='160Hz';
     Title[8]:='180Hz';
     Title[9]:='200Hz';
     Title[10]:='220Hz';
     beishu :=5;
    end;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
 if SavePictureDialog1.Execute then
  Image1.Picture.SaveToFile(SavePictureDialog1.FileName);
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -