关于Victor 串口控件使用

时间:2022-08-29 22:23:21
关于Victor 串口控件使用:
一般的功能我都使用了,但是我想问一下怎么才能读取当前有那些串口,比如:当前有COM1,COM2.我怎么才知道有呢,当然我可以从“设备管理器->端口”中看到,或者双击串口控件的图标,在端口设置中也可以看到当前存在的串口。当是若我要自动显示出有哪些串口,应该如何处理呢?比如说要显示在memo中显示“当前有COM1和com3”。希望能尽早回复。一下是我的初始化。
void __fastcall TForm1::FormCreate(TObject *Sender)
{


  try
   {
     YbCommDevice1->Active = true;
   }
  catch(Exception &e)
   {
     ShowMessage("YbCommDevice1: "+e.Message);
     if(!YbCommDevice1->SettingsDialog(this,true))
       Application->Terminate();
   }

   YbCommDevice1->PackageSize = 4096; //最大可发送 4096 个字节的数据包
   YbCommDevice1->PackageType = cptFrameTimeout; //使用超时的方法识别每帧数据
   YbCommDevice1->UsePackage = true; //启动 Package


  Memo1->Lines->Clear();
  Memo1->Lines->Add("等待接收...");

}

4 个解决方案

#1


我有很长时间没有做串口通讯的程序了,呵呵。另外,Victor组件的作者是Victor chen,也就是cppfans.com的站长,技术很不错的,有Victor组件方面的问题可以直接找他咨询。

列举本机可用的串口,可以读取注册表:
//---------------------------------------------------------------------------
// 列举本机可用的串口
#include <registry.hpp>
int CrnGetComList(TStrings *pComList)
{
    TRegistry *reg = new TRegistry;
    TStringList *pValueList = new TStringList;

    pComList->Clear();

    try
    {
        reg->RootKey = HKEY_LOCAL_MACHINE;
        reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
        reg->GetValueNames(pValueList);

        for(int i=0; i<pValueList->Count; i++)
            pComList->Add(reg->ReadString(pValueList->Strings[i]));

        reg->CloseKey();
    }
    __finally
    {
        delete pValueList;
        delete reg;
    }
    return pComList->Count;
}
//---------------------------------------------------------------------------
// 测试:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CrnGetComList(Memo1->Lines);
}

#2


老妖太强啦,这么快就解决了。我验证过了,可以用,谢谢啦

#3


妖哥,想问你另外一个问题,如果我要设置一个变量,软件关闭后,重新打开读取它,它不会初始化。怎么搞呢?比如:第一次打开时P=5;然后修改为P=6;让第二次打开软件P=6,应该把P写到哪里呢?如果是硬件我会写到Flash或EEPROM中,但是在builder中我不会怎么写。

#4


#include <inifiles.hpp>
//---------------------------------------------------------------------------
// 写入配置文件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int p = 5; // 要记录的值
    TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
    try
    {
        ini->WriteInteger("我的配置", "p", p);
    }
    __finally
    {
        delete ini;
    }
}
//---------------------------------------------------------------------------
// 从配置文件读取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int p;
    TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
    try
    {
        p = ini->ReadInteger("我的配置", "p", -1); // 最后一个参数为默认值
    }
    __finally
    {
        delete ini;
    }
    ShowMessage(IntToStr(p));
}

#1


我有很长时间没有做串口通讯的程序了,呵呵。另外,Victor组件的作者是Victor chen,也就是cppfans.com的站长,技术很不错的,有Victor组件方面的问题可以直接找他咨询。

列举本机可用的串口,可以读取注册表:
//---------------------------------------------------------------------------
// 列举本机可用的串口
#include <registry.hpp>
int CrnGetComList(TStrings *pComList)
{
    TRegistry *reg = new TRegistry;
    TStringList *pValueList = new TStringList;

    pComList->Clear();

    try
    {
        reg->RootKey = HKEY_LOCAL_MACHINE;
        reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
        reg->GetValueNames(pValueList);

        for(int i=0; i<pValueList->Count; i++)
            pComList->Add(reg->ReadString(pValueList->Strings[i]));

        reg->CloseKey();
    }
    __finally
    {
        delete pValueList;
        delete reg;
    }
    return pComList->Count;
}
//---------------------------------------------------------------------------
// 测试:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    CrnGetComList(Memo1->Lines);
}

#2


老妖太强啦,这么快就解决了。我验证过了,可以用,谢谢啦

#3


妖哥,想问你另外一个问题,如果我要设置一个变量,软件关闭后,重新打开读取它,它不会初始化。怎么搞呢?比如:第一次打开时P=5;然后修改为P=6;让第二次打开软件P=6,应该把P写到哪里呢?如果是硬件我会写到Flash或EEPROM中,但是在builder中我不会怎么写。

#4


#include <inifiles.hpp>
//---------------------------------------------------------------------------
// 写入配置文件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int p = 5; // 要记录的值
    TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
    try
    {
        ini->WriteInteger("我的配置", "p", p);
    }
    __finally
    {
        delete ini;
    }
}
//---------------------------------------------------------------------------
// 从配置文件读取
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int p;
    TIniFile *ini = new TIniFile(ExtractFilePath(ParamStr(0)) + "config.ini");
    try
    {
        p = ini->ReadInteger("我的配置", "p", -1); // 最后一个参数为默认值
    }
    __finally
    {
        delete ini;
    }
    ShowMessage(IntToStr(p));
}