蔡
蔡前进
Unregistered / Unconfirmed
GUEST, unregistred user!
有如下BCB代码,请帮我转换成Delphi代码:
void __fastcall TForm1::OnStkDataOK(TMessage &Message)//自定义消息处理句柄
{
char ct[40];
char sname[20];
struct tm *tblock;
// 注意:
// 必须按字节对齐编译
char szBuf[400];
PRCV_DATA pRcvData = (PRCV_DATA)Message.LParam;
if(Message.WParam==RCV_REPORT)
{
PRCV_DATA pRcvData = (PRCV_DATA)Message.LParam;
PRCV_REPORT_STRUCTEx pReport = pRcvData->m_pReport;
int nPacketNum = pRcvData->m_nPacketNum;
tblock = localtime(&(pReport->m_time));
sprintf(ct,"%02d%02d",tblock->tm_mday,tblock->tm_hour);
for(int i=0;
i<nPacketNum;
i++)
{
// ... 处理数据
if(pReport->m_fNewPrice>0.0 &&
pReport->m_fLastClose>0.0)
{
sprintf( szBuf, "%s %.02f %.02f %.02f %.02f %s", /
ct,/
pReport->m_fOpen,pReport->m_fHigh,pReport->m_fLow,/
pReport->m_fNewPrice, pReport->m_szName);
sprintf(sname,"%s",pReport->m_szLabel);
//socketlist->Values[sname]=szBuf;
Memo2->Lines->Values[sname]=szBuf;
}
pReport = (PRCV_REPORT_STRUCTEx)( ((PBYTE)pReport)+pReport->m_cbSize );
}
}
}
数据结构如下:
typedef struct tagRCV_REPORT_STRUCTEx
{
WORD m_cbSize; // 结构大小
time_t m_time; // 交易时间
WORD m_wMarket; // 股票市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码,以'/0'结尾
char m_szName[STKNAME_LEN]; // 股票名称,以'/0'结尾
float m_fLastClose; // 昨收
float m_fOpen; // 今开
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交额
float m_fBuyPrice[3]; // 申买价1,2,3
float m_fBuyVolume[3]; // 申买量1,2,3
float m_fSellPrice[3]; // 申卖价1,2,3
float m_fSellVolume[3]; // 申卖量1,2,3
float m_fBuyPrice4; // 申买价4
float m_fBuyVolume4; // 申买量4
float m_fSellPrice4; // 申卖价4
float m_fSellVolume4; // 申卖量4
} RCV_REPORT_STRUCTEx, *PRCV_REPORT_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
//补充数据头
//数据头 m_dwHeadTag == EKE_HEAD_TAG
#define EKE_HEAD_TAG 0xffffffff
typedef struct tagRCV_EKE_HEADEx
{
DWORD m_dwHeadTag; // = EKE_HEAD_TAG
WORD m_wMarket; // 市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码
}RCV_EKE_HEADEx,*PRCV_EKE_HEADEx;
//补充日线数据
typedef union tagRCV_HISTORY_STRUCTEx
{
struct
{
time_t m_time; //UCT
float m_fOpen; //开盘
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盘
float m_fVolume; //量
float m_fAmount; //额
WORD m_wAdvance; //涨数,仅大盘有效
WORD m_wDecline; //跌数,仅大盘有效
};
RCV_EKE_HEADEx m_head;
}RCV_HISTORY_STRUCTEx,*PRCV_HISTORY_STRUCTEx;
//补充分时线数据
typedef union tagRCV_MINUTE_STRUCTEx
{
struct{
time_t m_time; // UCT
float m_fPrice;
float m_fVolume;
float m_fAmount;
};
RCV_EKE_HEADEx m_head;
}RCV_MINUTE_STRUCTEx,*PRCV_MINUTE_STRUCTEx;
//补充除权数据
typedef union tagRCV_POWER_STRUCTEx
{
struct
{
time_t m_time; // UCT
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
float m_fProfit; // 每股红利
};
RCV_EKE_HEADEx m_head;
}RCV_POWER_STRUCTEx,*PRCV_POWER_STRUCTEx;
typedef struct tagRCV_FILE_HEADEx
{
DWORD m_dwAttrib; // 文件子类型
DWORD m_dwLen; // 文件长度
union
{
DWORD m_dwSerialNo; // 序列号,对股评
time_t m_FileTime; // 文件创建时间
};
char m_szFileName[MAX_PATH]; // 文件名 or URL
} RCV_FILE_HEADEx,*PRCV_FILE_HEADEx;
typedef struct tagRCV_DATA
{
int m_wDataType; // 文件类型
int m_nPacketNum; // 记录数,参见注一
RCV_FILE_HEADEx m_File; // 文件接口
BOOL m_bDISK; // 文件是否已存盘的文件
union
{
RCV_REPORT_STRUCTEx * m_pReport;
RCV_HISTORY_STRUCTEx * m_pDay;
RCV_MINUTE_STRUCTEx * m_pMinute;
RCV_POWER_STRUCTEx * m_pPower;
void * m_pData; // 参见注二
};
} RCV_DATA,*PRCV_DATA;
void __fastcall TForm1::OnStkDataOK(TMessage &Message)//自定义消息处理句柄
{
char ct[40];
char sname[20];
struct tm *tblock;
// 注意:
// 必须按字节对齐编译
char szBuf[400];
PRCV_DATA pRcvData = (PRCV_DATA)Message.LParam;
if(Message.WParam==RCV_REPORT)
{
PRCV_DATA pRcvData = (PRCV_DATA)Message.LParam;
PRCV_REPORT_STRUCTEx pReport = pRcvData->m_pReport;
int nPacketNum = pRcvData->m_nPacketNum;
tblock = localtime(&(pReport->m_time));
sprintf(ct,"%02d%02d",tblock->tm_mday,tblock->tm_hour);
for(int i=0;
i<nPacketNum;
i++)
{
// ... 处理数据
if(pReport->m_fNewPrice>0.0 &&
pReport->m_fLastClose>0.0)
{
sprintf( szBuf, "%s %.02f %.02f %.02f %.02f %s", /
ct,/
pReport->m_fOpen,pReport->m_fHigh,pReport->m_fLow,/
pReport->m_fNewPrice, pReport->m_szName);
sprintf(sname,"%s",pReport->m_szLabel);
//socketlist->Values[sname]=szBuf;
Memo2->Lines->Values[sname]=szBuf;
}
pReport = (PRCV_REPORT_STRUCTEx)( ((PBYTE)pReport)+pReport->m_cbSize );
}
}
}
数据结构如下:
typedef struct tagRCV_REPORT_STRUCTEx
{
WORD m_cbSize; // 结构大小
time_t m_time; // 交易时间
WORD m_wMarket; // 股票市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码,以'/0'结尾
char m_szName[STKNAME_LEN]; // 股票名称,以'/0'结尾
float m_fLastClose; // 昨收
float m_fOpen; // 今开
float m_fHigh; // 最高
float m_fLow; // 最低
float m_fNewPrice; // 最新
float m_fVolume; // 成交量
float m_fAmount; // 成交额
float m_fBuyPrice[3]; // 申买价1,2,3
float m_fBuyVolume[3]; // 申买量1,2,3
float m_fSellPrice[3]; // 申卖价1,2,3
float m_fSellVolume[3]; // 申卖量1,2,3
float m_fBuyPrice4; // 申买价4
float m_fBuyVolume4; // 申买量4
float m_fSellPrice4; // 申卖价4
float m_fSellVolume4; // 申卖量4
} RCV_REPORT_STRUCTEx, *PRCV_REPORT_STRUCTEx;
//////////////////////////////////////////////////////////////////////////////////
//补充数据头
//数据头 m_dwHeadTag == EKE_HEAD_TAG
#define EKE_HEAD_TAG 0xffffffff
typedef struct tagRCV_EKE_HEADEx
{
DWORD m_dwHeadTag; // = EKE_HEAD_TAG
WORD m_wMarket; // 市场类型
char m_szLabel[STKLABEL_LEN]; // 股票代码
}RCV_EKE_HEADEx,*PRCV_EKE_HEADEx;
//补充日线数据
typedef union tagRCV_HISTORY_STRUCTEx
{
struct
{
time_t m_time; //UCT
float m_fOpen; //开盘
float m_fHigh; //最高
float m_fLow; //最低
float m_fClose; //收盘
float m_fVolume; //量
float m_fAmount; //额
WORD m_wAdvance; //涨数,仅大盘有效
WORD m_wDecline; //跌数,仅大盘有效
};
RCV_EKE_HEADEx m_head;
}RCV_HISTORY_STRUCTEx,*PRCV_HISTORY_STRUCTEx;
//补充分时线数据
typedef union tagRCV_MINUTE_STRUCTEx
{
struct{
time_t m_time; // UCT
float m_fPrice;
float m_fVolume;
float m_fAmount;
};
RCV_EKE_HEADEx m_head;
}RCV_MINUTE_STRUCTEx,*PRCV_MINUTE_STRUCTEx;
//补充除权数据
typedef union tagRCV_POWER_STRUCTEx
{
struct
{
time_t m_time; // UCT
float m_fGive; // 每股送
float m_fPei; // 每股配
float m_fPeiPrice; // 配股价,仅当 m_fPei!=0.0f 时有效
float m_fProfit; // 每股红利
};
RCV_EKE_HEADEx m_head;
}RCV_POWER_STRUCTEx,*PRCV_POWER_STRUCTEx;
typedef struct tagRCV_FILE_HEADEx
{
DWORD m_dwAttrib; // 文件子类型
DWORD m_dwLen; // 文件长度
union
{
DWORD m_dwSerialNo; // 序列号,对股评
time_t m_FileTime; // 文件创建时间
};
char m_szFileName[MAX_PATH]; // 文件名 or URL
} RCV_FILE_HEADEx,*PRCV_FILE_HEADEx;
typedef struct tagRCV_DATA
{
int m_wDataType; // 文件类型
int m_nPacketNum; // 记录数,参见注一
RCV_FILE_HEADEx m_File; // 文件接口
BOOL m_bDISK; // 文件是否已存盘的文件
union
{
RCV_REPORT_STRUCTEx * m_pReport;
RCV_HISTORY_STRUCTEx * m_pDay;
RCV_MINUTE_STRUCTEx * m_pMinute;
RCV_POWER_STRUCTEx * m_pPower;
void * m_pData; // 参见注二
};
} RCV_DATA,*PRCV_DATA;