关于MSCOMM32 ( 积分: 20 )

  • 主题发起人 主题发起人 qiangren_2004
  • 开始时间 开始时间
Q

qiangren_2004

Unregistered / Unconfirmed
GUEST, unregistred user!
我注册安装了微软的MSCOMM32控件(OFFICE2000带的)后,拖到窗体上面时出现:

License information for TMSComm not found.you cannot use this control in design mode


谢谢高手指教,谢谢!!
 
我注册安装了微软的MSCOMM32控件(OFFICE2000带的)后,拖到窗体上面时出现:

License information for TMSComm not found.you cannot use this control in design mode


谢谢高手指教,谢谢!!
 
还要在注册表中写License信息
 
用regsvr32注册一下看看

我建议你最好不要用它。你做好系统交付给用户时也要在用户那你装MSCOMM32,麻烦。
用spcomm吧。
 
那确实
我一个程序用了mscomm32,搞了几次客户的电脑上都是不能运行程序
麻烦!
 
最好不用MSCOMM32,可使用API操作串口,非常方便就跟读写文件一样
 
楼上的兄弟有这方面的资料吗?
很想接触一下用api函数来操作串口方面的知识
csfangyuan@tom.com
 
有,需要的话可以加我QQ 44152788
 
使用API相对比较麻烦,最直接的办法就是安装VB6.0,安装后就可在设计状态下使用.
 
谢谢各位高手的指导,如果我现在要使用spcomm的话,怎样把如下用MsCOMM32写的程序改为用spcomm写的程序?
MsCOMM1.COMMPORT := 1;
msCOMM1.Settings := '19200,E,8,1';
MsCOMM1.PortOpen := true;
MsCOMM1.OUTPUT := ;
 
我可以发个spcomm写的例子给你。
 
好啊,我的地址是qiangren_2004@163.com,谢谢,感激不尽
 
用C语言写成DLL,然后供其他程序调用,写串口通讯用MSCOMM32终归不是最好的办法,归要到底MSCOMM32.OCX也是调用API来编写的OCX.非常灵活的,如下为初始化串口
BOOL icDevInit(int ComPort)
{
COMMTIMEOUTS timeout;
DCB dCB;

if(ComPort>99||ComPort<1) return false;
char ComName[5]="COM0";
_itoa(ComPort,&ComName[3],10);
hComm=CreateFile(ComName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(hComm==INVALID_HANDLE_VALUE) return false;
if(!GetCommState(hComm,&dCB))//取得当前的串口状态
{
icDevClose();
return false;
}
dCB.DCBlength=sizeof(dCB);//=28?
dCB.BaudRate=19200;//由读卡器已经固定
dCB.ByteSize=8;///数据位
dCB.Parity=0;///奇偶位
dCB.StopBits=ONESTOPBIT;///停止位
if(!SetCommState(hComm,&dCB))//设置串口状态
{
icDevClose();
return false;
}
if(!GetCommTimeouts(hComm,&timeout))//取得当前的超时设置
{
icDevClose();
return false;
}

timeout.ReadIntervalTimeout=4;// 读间隔超时
timeout.ReadTotalTimeoutConstant=4;// 读时间常量
timeout.ReadTotalTimeoutMultiplier=4;// 读时间系数
timeout.WriteTotalTimeoutConstant=4;// 写时间常量
timeout.WriteTotalTimeoutMultiplier=4;// 写时间系数

if(!SetCommTimeouts(hComm,&timeout))
{
icDevClose();
return false;//设置超时参数
}
if(!SetupComm(hComm,1024,1024))//设置缓冲区大小
{
icDevClose();
return false;
}
return true;
}
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
const
LabSpliter=3;
ResultSpliter=3;

type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
btOpen: TButton;
btClose: TButton;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
CheckBox1: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
Label6: TLabel;
Label7: TLabel;
Edit3: TEdit;
Label8: TLabel;
Label9: TLabel;
Edit4: TEdit;
Label10: TLabel;
Edit5: TEdit;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure btOpenClick(Sender: TObject);
procedure btCloseClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject
Buffer: Pointer;
BufferLength: Word);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
Test : boolean;
Lab_num,Assay,Result : String
// 实验号 , 实验项目 , 结果
{ Private declarations }
public

{ Public declarations }
end;

var
Form1: TForm1;
viewstring:string;
sbuf:array[0..16] of byte;
rbuf:array[0..1000] of byte;

implementation

{$R *.dfm}

procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:= '';
commflg:=true;
for i:=1 to 6 do begin
if not Form1.comm1.writecommdata(@sbuf,1) then begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring + inttohex(sbuf,2) +'' ;
end;
viewstring:='发送' + viewstring;
Form1.memo1.lines.add(viewstring);
Form1.memo1.lines.add('');
if not commflg then messagedlg('发送失败 !' ,mterror,[mbyes],0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.ItemIndex := 0;
ComboBox2.ItemIndex := 6;
ComboBox3.ItemIndex := 2;
ComboBox4.ItemIndex := 3;
ComboBox5.ItemIndex := 0;
Memo1.Text := '';
Test := False;
Lab_num := '';
Assay := '';
Result := ''
// 实验号 , 实验项目 , 结果
end;

procedure TForm1.btOpenClick(Sender: TObject);
begin
comm1.BaudRate := StrToInt(ComboBox2.items.Strings[ComboBox2.ItemIndex]);
comm1.CommName := ComboBox1.items.Strings[ComboBox1.ItemIndex];
case ComboBox5.ItemIndex of
0:comm1.StopBits := _1;
1:comm1.StopBits := _2;
end;
case ComboBox4.ItemIndex of
0:comm1.ByteSize := _5;
1:comm1.ByteSize := _6;
2:comm1.ByteSize := _7;
3:comm1.ByteSize := _8;
end;
case ComboBox3.ItemIndex of
0:comm1.Parity := Even;
1:comm1.Parity := Mark;
2:comm1.Parity := None;
3:comm1.Parity := Odd;
4:comm1.Parity := Space;
end;
comm1.StartComm;
btOpen.Enabled := False;
btClose.Enabled := True;
edit4.Text := '';
end;

procedure TForm1.btCloseClick(Sender: TObject);
begin
comm1.StopComm;
btOpen.Enabled := True;
btClose.Enabled := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
begin
sbuf[1]:=byte($f0)
//帧头
sbuf[2]:=byte($01)
//命令号
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0)
//帧尾
senddata;//调用发送函数
end;

end;

procedure TForm1.Comm1ReceiveData(Sender: TObject
Buffer: Pointer;
BufferLength: Word);
var
ss:string;
i,j,l:integer;
begin
move(buffer,pchar(@rbuf)^,bufferlength);
sbuf[0]:=byte($55)
//帧头
comm1.writecommdata(@sbuf[0],1);
setlength(ss,bufferlength);
move(buffer^,pchar(ss)^,bufferlength);
memo1.lines.add(ss);
memo1.lines.add('');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := '';
end;

procedure TForm1.Button3Click(Sender: TObject);
var
ss:string;
i,j,l,k:integer;
begin
j := 0;
l := 0;
ss:='4R|1|^^^hCG65664jhkhj|83.5|mIU/mL|1/1^5000/5000|N|N|F||h|20030927211337|20030927215438|C2';
for i:= 1 to length(ss) do begin
if copy(ss,i,1)='^' then begin
l:= l+1;
j:=i+1;
end;
if (l=3) and (copy(ss,i,1)='|') then
break;
end;
end;

end.
 
要怎样在注册表中写License信息才能使用mscomm32
 
留下你的qq,我发个文件给你
 
好啊,我的地址是qiangren_2004@163.com,谢谢,感激不尽
 
qiangren_2004:谢谢你的分,我发email不是很方便,留下qq吧
 

Similar threads

I
回复
0
查看
629
import
I
I
回复
0
查看
998
import
I
I
回复
0
查看
3K
import
I
I
回复
0
查看
1K
import
I
I
回复
0
查看
2K
import
I
后退
顶部