如何做package文件??? 先在有一些单元和dpk都是程序用到的各种孔件,现在把他们做在同意个package中以方便一次安装 应该如何进行工作 ? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用DELPHI向导NEW->package就OK了,在package增加控件 ADD然后编译就可以了! 自己封装一个类!如:{ 通讯包模块 01:包头; 02:数据段分割符; 03:包尾; 限制通讯包的长度为2048; 数据段格式: 数据名+‘:’+数据 例如:#01+ ‘LCNO:OC9987301000001’+ #02+ ‘CYNO:USD’+ #02+ #03 数据包初始化:InitPackage 数据打包:AddPackage 数据解包:GetPackage}unit pkgUnit;interfaceuses Windows,Messages,Graphics,Controls,Forms,Dialogs, SysUtils,Classes;const ChmyOK = 0; ChmyErr_spExec = 1; CRLF = #13#10; ACC_OK = 'ok'; SPackageHead = #01; SPackageData = #02; SPackageEnd = #03; SPackageLength = 2048;type TSPkgData = array [1..SPackageLength] of char; TSPackage = class(TObject) private { private declarations } function GetItem(Hash :string):string; procedure SetItem(Hash :string;data :string); public { public declarations } buf:TSPkgData; //两种构建方法 constructor Create(dd:TSPkgData);overload;virtual; constructor Create;overload;virtual; property Item[Hash:string]:string read GetItem write SetItem; procedure GetPacket(var v:TSPkgData); end;implementationconstructor TSPackage.Create(dd:TSPkgData);begin Inherited Create; move(dd,buf,SPackageLength);end;constructor TSPackage.Create;begin buf[1] := SPackageHead; buf[2] := SPackageEnd;end;function TSPackage.GetItem(Hash:string):string;var i,j:integer; str:string; bb:boolean;//读取通讯包中的数据begin str:=''; i:=1; j:=1; bb:=False; //查找数据项 while(true) do begin if(i>=SPackageLength)or(buf[i]=SPackageEnd)then break; if buf[i] = Hash[j] then inc(j) else j:=1; inc(i); if(j>Length(Hash))and(buf[i]=':')then begin bb:=true; break; end; end; //读取数据项 if(bb)then begin while(true) do begin inc(i); if(buf[i]=SPackageData)or(i>=SPackageLength) then break else str := str + buf[i]; end; end; //返回结果 result := str;end;procedure TSPackage.SetItem(Hash:string;data:string);var i:integer; str:string;//写入数据项begin i:=1; str := Hash + ':' +data + SPackageData + SPackageEnd; while(true) do begin if buf[i]=SPackageEnd then break; inc(i); if i>=SPackageLength then exit; end; if(i+Length(str)+2)>=SPackageLength then exit; move(str[1],buf[i],length(str));end;//读取通讯包procedure TSPackage.GetPacket(var v:TSPkgData);begin move(buf,v,SPackageLength);end;end. kao 楼上的代码真恐怖 应该怎么设计contains和requires两个子句? 求FastReport for delphi2009 rav5 打印的問題 和ColeSafeArray对应的类 关于分布式应用 先安装98后安装2000,如何在启动时使机器自动进98系统?? Delphi怎么没有OnMouseOut事件阿?OnMouseOn也没有。。。 ??? 得到“窗口句柄”后,怎样得到窗体内其他对象的句柄,(高手请进) 打印的问题:我好急! 有关TreeView问题 請教各位﹕如何刪除某個目錄下的所有文件﹖ label1.caption显示问题。 dbedit.text 与dbedit.edittext有什么区别?
就OK了,在package增加控件 ADD
然后编译就可以了!
{
通讯包模块
01:包头;
02:数据段分割符;
03:包尾;
限制通讯包的长度为2048;
数据段格式:
数据名+‘:’+数据
例如:#01+
‘LCNO:OC9987301000001’+
#02+
‘CYNO:USD’+
#02+
#03
数据包初始化:InitPackage
数据打包:AddPackage
数据解包:GetPackage
}
unit pkgUnit;interface
uses
Windows,Messages,Graphics,Controls,Forms,Dialogs,
SysUtils,Classes;const
ChmyOK = 0;
ChmyErr_spExec = 1;
CRLF = #13#10;
ACC_OK = 'ok'; SPackageHead = #01;
SPackageData = #02;
SPackageEnd = #03;
SPackageLength = 2048;type
TSPkgData = array [1..SPackageLength] of char;
TSPackage = class(TObject)
private
{ private declarations }
function GetItem(Hash :string):string;
procedure SetItem(Hash :string;data :string); public
{ public declarations }
buf:TSPkgData; //两种构建方法
constructor Create(dd:TSPkgData);overload;virtual;
constructor Create;overload;virtual;
property Item[Hash:string]:string read GetItem write SetItem;
procedure GetPacket(var v:TSPkgData);
end;implementationconstructor TSPackage.Create(dd:TSPkgData);
begin
Inherited Create;
move(dd,buf,SPackageLength);
end;constructor TSPackage.Create;
begin
buf[1] := SPackageHead;
buf[2] := SPackageEnd;
end;function TSPackage.GetItem(Hash:string):string;
var
i,j:integer;
str:string;
bb:boolean;
//读取通讯包中的数据
begin
str:='';
i:=1;
j:=1;
bb:=False; //查找数据项
while(true) do
begin
if(i>=SPackageLength)or(buf[i]=SPackageEnd)then break;
if buf[i] = Hash[j] then inc(j)
else j:=1;
inc(i);
if(j>Length(Hash))and(buf[i]=':')then
begin
bb:=true;
break;
end;
end; //读取数据项
if(bb)then
begin
while(true) do
begin
inc(i);
if(buf[i]=SPackageData)or(i>=SPackageLength) then break
else str := str + buf[i];
end;
end; //返回结果
result := str;
end;procedure TSPackage.SetItem(Hash:string;data:string);
var
i:integer;
str:string;
//写入数据项
begin
i:=1;
str := Hash + ':' +data + SPackageData + SPackageEnd;
while(true) do
begin
if buf[i]=SPackageEnd then break;
inc(i);
if i>=SPackageLength then exit;
end;
if(i+Length(str)+2)>=SPackageLength then exit;
move(str[1],buf[i],length(str));
end;//读取通讯包
procedure TSPackage.GetPacket(var v:TSPkgData);
begin
move(buf,v,SPackageLength);
end;end.
楼上的代码真恐怖
和requires两个子句?