delphi 中一种好用的数组定义方法以及函数嵌套的使用源代码

type
TByteBuff;= array of integer;

 function abc(a:integer):TByteBuff;;
 var
 tempArr:TByteBuff;
 begin
 setlength(tempArr,2);
 tempArr[0] := a;
 tempArr[1] := a + 10;
 result:=tempArr;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 var
 a : integer;
 begin
 a := 5;
 showmessage(inttostr(   abc(a)[0]   ));  //5  //这以这样使用返回数组
 showmessage(inttostr(   abc(a)[1]   ));  //15 //这以这样使用返回数组
end;

function TFrmMain.CommandFrameData(CommandCode, MeasureType, SampleMode: Byte;
  DataSize, MeasureSum, MeasureID: Integer): TByteBuff;
var
tempsendbuff,InteraBuff:TByteBuff;
J,sum:Integer;

function BuildFrameData(CommandCode, MeasureType, SampleMode: Byte;
  DataSize, MeasureSum, MeasureID: Integer): TByteBuff;  //组帧数据
  var
sendbuff: TByteBuff;
i:Integer;
begin
setlength(sendbuff,Datasize);
//FillChar(sendbuff,SizeOf(sendbuff),0);
if CommandCode=$01 then   //建立连接帧
begin
    sendbuff[0]:=$01;
end;
if CommandCode=$02 then   //测量任务及参数设置指令
begin
  if MeasureType=$03 then                         //数字测量类型
  begin
    sendbuff[0]:=CommandCode;                     //指令码
    sendbuff[1]:=MeasureSum;                      //被测量个数
    sendbuff[2]:=MeasureID;                       //测量ID
    sendbuff[3]:=MeasureType;                     //测量类型

    sendbuff[5]:=DMeasureParam.DChannelNum;       //数字通道号
    sendbuff[6]:=DMeasureParam.PulsePerCir[0];    //每圈脉冲数
    sendbuff[7]:=DMeasureParam.PulsePerCir[1];
    sendbuff[8]:=DMeasureParam.FrequencyCoefficient;   //分频系数
    sendbuff[4]:=SizeOf(sendbuff[5])+SizeOf(sendbuff[6])+SizeOf(sendbuff[7])+SizeOf(sendbuff[8]);   //测量参数长度

  end
  else
  begin
    sendbuff[0]:=CommandCode;                     //指令码
    sendbuff[1]:=MeasureSum;                      //被测量个数
    sendbuff[2]:=MeasureID;                       //测量ID
    sendbuff[3]:=MeasureType;

    if AMeasureParam.Samplemode=$00 then
    begin
    sendbuff[5]:=AMeasureParam.AChannelNum;       //模拟通道号
    sendbuff[6]:=AMeasureParam.DChannelNum;     //数字通道号
    sendbuff[7]:=AMeasureParam.NodeNumPerCir[0]; //每圈采集点数
    sendbuff[8]:=AMeasureParam.NodeNumPerCir[1];
    sendbuff[9]:=AMeasureParam.PulsePerCir[0];    //每圈脉冲数
    sendbuff[10]:=AMeasureParam.PulsePerCir[1];
    sendbuff[11]:=AMeasureParam.ChoseRange;       //量程选择
    sendbuff[4]:=SizeOf(sendbuff[5])+SizeOf(sendbuff[6])+SizeOf(sendbuff[7])+SizeOf(sendbuff[8])+SizeOf(sendbuff[9])+SizeOf(sendbuff[10])+SizeOf(sendbuff[11]);   //测量参数长度

    end;
    if AMeasureParam.Samplemode=$01 then
    begin
    sendbuff[5]:=AMeasureParam.AChannelNum;       //模拟通道号
    sendbuff[6]:=AMeasureParam.SampleRate[0];     //采样率
    sendbuff[7]:=AMeasureParam.SampleRate[1];
    sendbuff[8]:=AMeasureParam.SampleRate[2];
    sendbuff[9]:=AMeasureParam.SampleRate[3];
    sendbuff[10]:=AMeasureParam.SaveLetter;
    sendbuff[4]:=SizeOf(sendbuff[5])+SizeOf(sendbuff[6])+SizeOf(sendbuff[7])+SizeOf(sendbuff[8])+SizeOf(sendbuff[9])+SizeOf(sendbuff[10]);
    end;
  end;

end;
Result:=sendbuff;

end;
  begin
sum:=0;
InteraBuff:=BuildFrameData(CommandCode, MeasureType, SampleMode,
  DataSize, MeasureSum, MeasureID);
setlength(tempsendbuff,Sizeof(InteraBuff)+6);
tempsendbuff[0]:=$7E;
tempsendbuff[1]:=Sizeof(InteraBuff)+2;
for J := 0 to Sizeof(InteraBuff) - 1 do
begin
  tempsendbuff[2+J]:=InteraBuff[J];
  sum:=sum+interabuff[J];
end;
tempsendbuff[3+J]:=(sum mod 65535);
tempsendbuff[4+J]:=$7F;
Result:=tempsendbuff;

  end;
时间: 2025-01-13 15:26:27

delphi 中一种好用的数组定义方法以及函数嵌套的使用源代码的相关文章

Delphi中怎样将字符串按给定字符分隔(类似split函数的功能)

Delphi中怎样将字符串按给定字符分隔(类似split函数的功能) 分类:            Delphi2007-05-16 11:094911人阅读评论(2)收藏举报 delphiintegerstringbutton文本编辑function 今天偶尔要做的Delphi程序,其中涉及到了字符串处理,里面有一个功能类似于VB里的split()函数的功能,于是查了很久才查到些资料,现将这些资料整理一下,方便大家. 首先是一个网友自己编的函数.实现了和split()函数的功能. unit U

DELPHI中枚举类型数据的介绍和使用方法

在看delphi程序的时候看到aa=(a,b,c,d);这样的东西,还以为是数组,同事说是函数,呵呵,当然这两个都不屑一击,原来这样式子是在声明并付值一个枚举类型的数据.下边写下来DELPHI中枚举类型数据的介绍和使用方法.见笑..------------------------------------------------------枚举类型 Pascal程序不仅用于数值处理,还更广泛地用于处理非数值的数据.例如,性别.月份.星期几.颜色.单位名.学历.职业等.1.枚举类型的定义格式: ty

php中的注释、变量、数组、常量、函数应用介绍

php中的注释.变量.数组.常量.函数应用介绍 本文将详细介绍php中的注释.变量.数组.常量.函数应用,需要的朋友可以参考下 php中单引号与双引号的区别? 1. 由下可看出,双引号的变量是解析并输出,而单引号的变量不解析. 2.单引号的解析速度比双引号的快 3. 对于单引号来说,只有两个转义 \',\\ 4. 除了上述两个转义字符,其他都原样输出. 5. 对于双引号来说,可转义字符除\\,\',\"之外,还有\t, \r , \n 等 6.除了单引号和双引号用来声明字符串变量外,还有here

Delphi中Twebbrowser的document 对象的属性、方法、事件一览(转)

Delphi中Twebbrowser的document 对象的属性.方法.事件一览(转) 2012-12-07 10:19:39|  分类: Delphi 零碎 |  标签:webbrowser  属性  方法  事件  delphi   |举报 |字号大中小 订阅 {ihtmldocument2 方法:}write //写入writeln //写入并换行open //打开一个流,以收集 document.write 或 document.writeln 的输出close //关闭并输出用 do

DELPHI中四种EXCEL访问技术实现

一.引言 EXCEL在处理中文报表时功能非常强大,EXCEL报表访问也是信息系统开发中的一个重要内容,本文总结以往开发中所用到的几中EXCEL文件访问方法,在实际工作中也得到了很好的验证,本文列举了其中四种方法的实例与读者共享,程序已在WINDOWS2000操作系统.OFFFICE2000应用软件和DELPHI7环境下调试通过. 二.ADO方式访问EXCEL文件 ADO方式访问EXCEL文件时,将EXCEL文件看作一个等同Oracle.MS SQLServer等数据库的一个ODBC数据源本文应用

Delphi中统一显示表格字段名的高效方法

问题描述:在开发数据库程序时,我们经常要使用很多的表格显示组件DBGrid.当DBGrid显示某表格的数据时,其字段标题默认的就是后台数据库中的表格的字段名称.而为了数据库开发方便,后台数据库中的表格的字段标题通常是用英文表示的,如用Employees表中的EmployeesID表示雇员编号.但是我们开发给用户的程序必须以汉字显示字段标题,即我们要以‘雇员编号’显示给用户.假设我们是用ADOQuery组件(此处为了说明清楚只使用ADOQuery组件,实际可以是其它数据库组件)query1来加载E

数组定义方法 数组遍历方法 全局变量和局部变量定义 赋值传值和赋值传址定义

数组的定义方法: 方式一:使用new运算符结合Array()构造函数来创建 var arr = new Array(); 方式二:创建指定长度的数组,()中只有一个整数 var arr = new Array(3); 数组的长度:arr.length,只能统计一维数组的长度. 方式三:将多个数组元素添加小括号()中,各个元素间用逗号隔开 var arr = new Array(10,20,30,40,50); 方式四:使用中括号[]来创建一个数组 var arr = [10,20,30,40];

js中使用使用原型(prototype)定义方法的好处

经常在前端面试或是和其他同行沟通是,在谈到构造在JS定义构造函数的方法是最好使用原型的方式:将方法定义到构造方法的prototype上,这样的好处是,通过该构造函数生成的实例所拥有的方法都是指向一个函数的索引,这样可以节省内存. 当然,这种说法没有任何问题,只是在实现上,并非只有使用prototype的方式才能达到这样的效果,我们可以将方法以函数的形式定义在构造函数之外,然后在构造函数中通过this.method = method的方式,这样生成的实例的方法也都通过索引指向一个函数,具体如下:

Delphi中三种方法获取Windows任务栏的高度

第一种:需要引用Windows单元 [delphi] view plain copy ShowMessage(IntToStr(GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYFULLSCREEN)-GetSystemMetrics(SM_CYCAPTION))); 第二种:需要引用Windows单元 [delphi] view plain copy function GetSystemTaskBarHeight:Integer; var