急需帮助!高手请进...(230分)

  • 主题发起人 主题发起人 zwh
  • 开始时间 开始时间
Z

zwh

Unregistered / Unconfirmed
GUEST, unregistred user!
; 本人目前遇到几个疑难,急需各路高手拔刀相助。重酬!
1.如何直接读取串口的数据?就好象一些股票系统一样,通过
一个接收设备把信息通过一条数据线连接到电脑的串口,再由
软件读取串口的数据。<150分>
2.有这样两个不同结构的文件,请看:
type
Tstudent=record
Id:integer;
Name:string[8];
English:real;
end;
type
Tstudent=record
Id:integer;
Name:string[8];
English:real;
Chinese:real;
address:string[40];
end;
请问:在程序中应该如何才能把这两个不同结构的文
件识别出来?有没有方法可以象数据库文件一样,在文
件的某部分记录该数据库字段结构的信息?(50分)
3.将一个自定义结构的文件作为一个资源文件编译进
应用程序中,如何才能使用这个文件?(30分)


 
1. 用MSComm32控件, 在OnComm事件中判断InBuffer的长度, 如果大于0, 则读进来
并且对读入的信息进行分析. 当然数据通信应该定义一套协议, 最简单的是将发
送的数据分成包, 每个包有一个header, 用来描述包的长度和内容. 接受收到信
息报后

 
1. 用MSComm32控件, 在OnComm事件中判断InBuffer的长度, 如果大于0, 则读进来
并且对读入的信息进行分析. 当然数据通信应该定义一套协议, 最简单的是将发
送的数据分成包, 每个包有一个header, 用来描述包的长度和内容. 接受收到信
息包后, 返回一个成功接受的信息, 准备接受下一个包.
2. 这是Pascal中典型的带有viriant的Record类型
TNational = (ntChinese, ntWestern, ntOther);
TStudent = record
ID: Longint;
Case National of
ntChinese: (
FamilyName: String[4];
GivenName: String[4]);
ntWestern: (
FamilyName: String[20];
FirstName: String[20];
MiddleName: String[20]);
ntOther: (
FamilyName: String[20];
GivenName: String[50])
end;
end;
当从文件中读入一个纪录后, 可以用 National 来判别其类型:
procedure InfoFromFile;
var
F: File of TStudent;
AStudent: TStudent;
CountOfChinese, CountOfWestern, CountOfOther: integer;
begin
AssignFile(F, 'StudentFile.STU');
Reset(F);
while not Eof(F) do
begin
Read(f,AStudent);
case AStudent.Nationl of
ntChinese: Inc(CountOfChinese);
ntWestern: Inc(CountOfWestern);
else Inc(CountOfOther);
end;
end;
ShowMessage(Format('Chinese: %d; Western: %d; Other: %d',
[CountOfChinese, CountOfWestern, CountOfOther]));
end;
3. 可以参考将wav文件加入到Resource的方法实现
 
huizhang,您老太快了吧!
 
1. 控件/VXD,随便到个大的控件站点上拉
2. 写文件时加标志
3. 直接读资源

会长:一夜没睡,还是刚起来?
 
to huizhang:
请问MSComm32控件哪里可以下载?
to CJ:
您的回答太简略,可否解释得具体一些,最好附带例子!
 
zwb:本坛控件库搜索一下,
深度里弦一定有

www.compat.online.sh.cn/free/arthurj 有一个 TIP 是说资源的

还有个问题,会长已经说的很明白了
 
MSComm32.OCX, comes with VB4.0, 5.0, 6.0
 
1、可以用SPCOMM,有源代码。
2、记录中加入标志“成员”。
3、用资源开发工具生成资源,如myres.res,
(建议使用微软的Developer Studio),
用{$R myres.res}包含进来,用LoadResource读资源。
 
to huizhang:
关于第3个问题,我要求的是将一个自定义结构的文件作为一个资源
文件编译进应用程序中,如何才能使用这个文件(指如何使用这个自定义结构
的文件)?并不是如何把资源文件编译进应用程序中。
to zhaoyipeng:
SPCOMM控件似乎是只能用于MODEM与MODEM间的通讯。
请问,记录中加入标志“成员”是什么意思,应该如何实现?
 
你的第3个问题十分怪异, 能否解释想作什么吗?

自定义的类型只能静态编译使用, 不太可能装入资源文件中使用(至少我没见过这么用
的).

最简单的用法是将自定义的结构类型放到一个Unit中, 使用是加入到相应的Uses中.
 
; to huizhang:
不好意思, 我没有把问题说清楚。第三个问题是这样:
有一个文件student.dat,其是一个自定义结构的文件,
接着建立一个文本文件, 内容如下:
copy con myfile.txt (回车)
student file "student.dat"
然后通过Brcc32.exe编译成myfile.res的资源文件,
最后在应用程序中用{$R myfile.res}编译指令把资源
文件与应用程序编译在一起,我应该如何才能使用这个
student.dat文件呢?


 
你可以查看一下早期回答的问题"关于在 Delphi 中使用DLL 中的字符资源 "
其ID号: 000062

其实你是要把一段文字作为纯字符串编译并连接到执行文件中, 做起来十分简单:

1. 在你的Unit中的某个位置加上资源字符串的说明, like this:

...
ResourceString
StudentFile = 'student.dat';

implementation
...

2. 程序中可以把 StudentFile 字符资源当成一个字符串常数使用

showmessage('The Student File is ' + StudentFile);
...
var
f: File of TMyStudent;
...
AssignFile(F, StudentFile);

在你的Exe文件中实际上的字符串资源表中有一个字符串其值为"student.dat", 并且
有一个ID号
 
;TO:huizhang
首先非常感谢您的帮助!

您的方法行不通! 它必须要在当前目录下有student.dat文件才可以。

 
到不一定非在当前目录下使用Student.dat, 她只是一个字符串而已, 你愿意在前面
加上一个目录当然可以. 例如:
ResourceString
StudentFile = './DataFile/Student.dat';
or
StudentFile = 'C:/Student Data Files/Student.dat';

要打开一个文件, 如果你不指定路径, 当然程序就认为该文件在当前目录下了. 这与
文件名放在什么地方无关. 要想用户能够改变并设置文件路径, 你需要在你的程序中
加上一个INI文件或者写到系统的注册表里面.

一般情况下如果数据文件较少, 且你的程序安装到一个独立的目录下, 把数据文件放
在执行程序目录下是最好的解决办法. 如果数据文件很多或很庞大, 简单的办法是在
执行文件所在的目录下建立一个数据文件目录. 如果不想如此, 只好用INI文件了.
 
to huizhang:
我的spcomm丢掉了,能寄给我吗?(本论坛的用不了)
谢谢!
 
Sorry Tang,

SpComm is not in my collection. I never used that thing. You may
get it form http://vcl.vclxx.com/DelphiGB/
 
;TO:huizhang
我的意思是把student.dat文件当作资源文件编译进应用程序中,
这样我就不必要发放应用程序的时候还要带着student.dat文件。

 
原来如北!

在Form中加上一个TMemo or TList之类的东西, 把那个Student.dat当作字符文件
装进去, 运新时候让他不可见就是了. 保证一个字符不少地编译到资源中去.
 
;TO:huizhang
这个办法我也知道, 但我想假如能够直接使用文件的话效果会更好!
不知道还有没有其它的办法?
 
后退
顶部