⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stock_unit.pas

📁 通视卡接收股票delphi7演示版,用delphi 7编写
💻 PAS
字号:
unit stock_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, STOCKLib_TLB, StdCtrls, Grids;

type
  TStock1Form = class(TForm)
	BtnSetup: TButton;
	BtnReceive: TButton;
	memo1: TMemo;
	ReportGrid: TStringGrid;
	MinGrid: TStringGrid;
	HisGrid: TStringGrid;
    Base: TMemo;
    LBase: TLabel;
    News: TMemo;
    LNews: TLabel;
    Button1: TButton;
	Procedure Rece;
	procedure stop;
	procedure BtnReceiveClick(Sender: TObject);
	procedure BtnSetupClick(Sender: TObject);
	procedure Stock1Report(ASender: TObject; nPacket, pBuf: Integer);
	procedure Stock1MinData(ASender: TObject; nPacket,
	  pBuf: Integer);
	procedure Stock1History(ASender: TObject; nPacketNum,
	  pBuf: Integer);
	procedure Stock1BaseFile(ASender: TObject;
	  const strFileName: WideString; Market: Smallint; nFileLen,
	  pBuf: Integer);
	procedure Stock1NewsFile(ASender: TObject; NewsType,
	  SerialNo: Integer; const pFileName: WideString; nFileLen,
	  pBuf: Integer);
	procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;


var
  Stock1Form: TStock1Form;
  Stock1:TStockDriver; //通视卡组件对象
  Stock1Rep:TStockReport; //行情对象
  Stock1Min:TStockMinData; //补分时对象
  Stock1His:TStockHisData;  //补日线数据对象
  Stock1Rep2I:Istockreport2; //新格式行情接口
  Report:OLE_RCV_REPORT2;
  Min:OLE_RCV_MINUTE;
  His:OLE_RCV_HISTORY;
  err:integer;
  stockdll:Thandle;
implementation

{$R *.dfm}

uses about;
procedure TStock1Form.BtnReceiveClick(Sender: TObject);
begin
	if BtnReceive.Caption='关闭接收系统' then stop
	else if BtnReceive.Caption='启动接收系统' then Rece;
end;



procedure TStock1Form.BtnSetupClick(Sender: TObject);
begin
	 stock1.Setup(1);//显示设置窗口
	 memo1.Lines.Append('目前接收到的股票总数:'+inttostr(stock1.TotalNumber));
	 memo1.Lines.Append('上市的股票总数:'+inttostr(stock1.STKNumInMarket));
end;

procedure TStock1Form.Stock1Report(ASender: TObject; nPacket,pBuf: Integer);
var I:Integer;
begin
	//showmessage('收到Report行情数据');
	ReportGrid.Cells[5,2]:=inttostr(nPacket);//包数
	stock1rep.Attach(nPacket,pBuf);//将数据转存到对象
	for I:=0 to nPacket-1 do
	 begin
	   report:=Stock1Rep2I.ElementAt[i];
	   with ReportGrid do
		 with report do
		  begin
		   CASE m_market of //市场
			Ole_SH_MarketeX:cells[4,1]:='上海';//=$00004853 (18515)
			Ole_SZ_MarketeX:cells[4,1]:='深圳';//=$00005A53  (23125)
			Ole_HK_MarketeX:cells[4,1]:='香港';//=$00004B48  (19272)
		   end;
	  cells[1,1]:=floattostrF(m_fSellPrice5,ffNumber,8,3);   cells[2,1]:=floattostrF(m_fSellVolume5,ffNumber,8,0);   cells[4,0]:=TimeToStr(m_Time);
	  cells[1,2]:=floattostrF(m_fSellPrice4,ffNumber,8,3);   cells[2,2]:=floattostrF(m_fSellVolume4,ffNumber,8,0);
	  cells[1,3]:=floattostrF(m_fSellPrice[2],ffNumber,8,3); cells[2,3]:=floattostrF(m_fSellVolume[2],ffNumber,8,0); cells[4,2]:=m_strLabel;
	  cells[1,4]:=floattostrF(m_fSellPrice[1],ffNumber,8,3); cells[2,4]:=floattostrF(m_fSellVolume[1],ffNumber,8,0); cells[4,3]:=m_strName;
	  cells[1,5]:=floattostrF(m_fSellPrice[0],ffNumber,8,3); cells[2,5]:=floattostrF(m_fSellVolume[0],ffNumber,8,0); cells[4,4]:=floattostrF( m_fLastClose,ffNumber,8,3);
	  cells[1,6]:=floattostrF(m_fBuyPrice[0],ffNumber,8,3);  cells[2,6]:=floattostrF(m_fBuyVolume[0],ffNumber,8,0);  cells[4,5]:=floattostrF( m_fOpen,ffNumber,8,3);
	  cells[1,7]:=floattostrF(m_fBuyPrice[1],ffNumber,8,3);  cells[2,7]:=floattostrF(m_fBuyVolume[1],ffNumber,8,0);  cells[4,6]:=floattostrF(m_fHigh,ffNumber,8,3);
	  cells[1,8]:=floattostrF(m_fBuyPrice[2],ffNumber,8,3);  cells[2,8]:=floattostrF(m_fBuyVolume[2],ffNumber,8,0);  cells[4,7]:=floattostrF( m_fLow,ffNumber,8,3);
	  cells[1,9]:=floattostrF(m_fBuyPrice4,ffNumber,8,3);    cells[2,9]:=floattostrF(m_fBuyVolume4,ffNumber,8,0);    cells[4,8]:=floattostrF( m_fNewPrice,ffNumber,8,3);
	  cells[1,10]:=floattostrF(m_fBuyPrice5,ffNumber,8,3);   cells[2,10]:=floattostrF(m_fBuyVolume5,ffNumber,8,0);   cells[4,9]:=floattostrF( m_fVolume,ffNumber,9,0);
																												 cells[4,10]:=floattostrF(m_fAmount,ffNumber,12,2);
		  end;
	 end;
end;


procedure TStock1Form.Stock1MinData(ASender: TObject; nPacket,  pBuf: Integer);
var i,nP:integer;
begin
	Stock1Min.Attach(nPacket,pBuf);
	nP:=Stock1Min.PacketNum;//有效分时包数
	MinGrid.Cells[2,2]:=inttostr(nPacket);//信息包数
	MinGrid.Cells[2,4]:=inttostr(nP); //有效包数
	for I:=0 to nP-1 do
	   begin
		 min:=Stock1Min.ElementAt[i];
		 With MinGrid do
			With Min do
			begin
			   CASE m_market of //市场
				Ole_SH_MarketeX:cells[1,1]:='上海';//=$00004853
				Ole_SZ_MarketeX:cells[1,1]:='深圳';//=$00005A53
				Ole_HK_MarketeX:cells[1,1]:='香港';//=$00004B48
			   end;
				cells[1,0]:=TimeToStr(m_Time);cells[1,2]:=m_strLabel;
				cells[1,3]:=floattostrF(m_fPrice,ffNumber,8,3);cells[1,4]:=floattostrF( m_fVolume,ffNumber,9,0);cells[1,5]:=floattostrF( m_fAmount,ffNumber,12,2);
			end;
	   end;

end;

procedure TStock1Form.Stock1History(ASender: TObject; nPacketNum, pBuf: Integer);
var i,nP:integer;
begin
	Stock1His.Attach(nPacketNum,pBuf);//数据写入缓存
	np:=Stock1His.PacketNum;
	HisGrid.Cells[2,2]:=inttostr(nPacketNum);//信息包数
	HisGrid.Cells[2,4]:=inttostr(nP);//有效包数
	for I:=0 to nP-1 do
	   begin
		 His:=Stock1His.ElementAt[i];
		 With HisGrid do
			With His do
			begin
			   CASE m_market of //市场
				Ole_SH_MarketeX:cells[1,1]:='上海';//=$00004853
				Ole_SZ_MarketeX:cells[1,1]:='深圳';//=$00005A53
				Ole_HK_MarketeX:cells[1,1]:='香港';//=$00004B48
			   end;
				cells[1,2]:=DateToStr(m_Time);cells[1,0]:=m_strLabel;
				cells[1,3]:=floattostrF(m_fOpen,ffNumber,8,3);
				cells[1,4]:=floattostrF(m_fHigh,ffNumber,8,3);
				cells[1,5]:=floattostrF(m_fLow,ffNumber,8,3);
				cells[1,6]:=floattostrF(m_fClose,ffNumber,8,3);
				cells[1,7]:=floattostrF( m_fVolume,ffNumber,9,0);
				cells[1,8]:=floattostrF( m_fAmount,ffNumber,12,2);
				cells[1,9]:=floattostrF( m_nAdvance,ffNumber,9,0);
				cells[1,10]:=floattostrF( m_nDecline,ffNumber,9,0);
			end;
	   end;

end;

procedure TStock1Form.Stock1BaseFile(ASender: TObject;const strFileName: WideString; Market: Smallint; nFileLen,  pBuf: Integer);
begin
	base.Clear;
	case market of
	  18515:Base.Lines.Append('上海');
	  23125:Base.Lines.Append('深圳');
	  19272:Base.Lines.Append('香港');
	end;
	Base.Lines.Append('文件名:'+StrFileName);
	Base.Lines.Append('文件长度:'+inttostr(nFileLen));
	Base.Lines.Append('缓存指针:'+inttoHex(pBuf,7));
	Base.Lines.Append(stock1.ToString(nFileLen,pBuf));

end;

procedure TStock1Form.Stock1NewsFile(ASender: TObject; NewsType,SerialNo: Integer; const pFileName: WideString; nFileLen, pBuf: Integer);
begin
   News.Clear;
	case NewsType of
		2:News.Lines.Append('上交所公告');
		4:News.Lines.Append('深交所公告');
		6:News.Lines.Append('港交所公告');
		8:News.Lines.Append('电视台消息');
	 end;
	News.Lines.Append('序列号:'+inttostr(serialNo));
	News.Lines.Append('文件名:'+pFileName);
	News.Lines.Append('文件长度:'+inttostr(nFileLen));
	News.Lines.Append('缓存区指针:'+inttohex(pBuf,7));
	News.Lines.Append(stock1.ToString(nFileLen,pBuf));
end;



procedure TStock1Form.FormCreate(Sender: TObject);
begin
 err:=0; BtnReceive.Caption:='启动接收系统';
 if fileExists('stock.dll')
  then BtnReceive.Enabled:=True
  else begin
		BtnReceive.Enabled:=False;
		showmessage('Stock.dll模块不存在');
	  end;
  with reportGrid do    //行情表
	begin
	  colcount:=6;rowcount:=11;
	  cells[0,0]:='行情';cells[1,0]:='价'; cells[2,0]:='量';cells[3,0]:='时间:'; cells[5,0]:='行情事件';
	  cells[0,1]:='卖5';                                    cells[3,1]:='市场:'; cells[5,1]:='信息包数';
	  cells[0,2]:='卖4';                                    cells[3,2]:='代码:';
	  cells[0,3]:='卖3';                                    cells[3,3]:='名称:';
	  cells[0,4]:='卖2';                                    cells[3,4]:='昨收:';
	  cells[0,5]:='卖1';                                    cells[3,5]:='今开:';
	  cells[0,6]:='买1';                                    cells[3,6]:='最高:';
	  cells[0,7]:='买2';                                    cells[3,7]:='最低:';
	  cells[0,8]:='买3';                                    cells[3,8]:='最新:';
	  cells[0,9]:='买4';                                    cells[3,9]:='成交量:';
	 cells[0,10]:='买5';                                    cells[3,10]:='成交金额:';
	end;
 with minGrid do  //补分时表
   begin
	 colcount:=3;rowcount:=6;
	 cells[0,0]:='时间:';cells[0,1]:='市场:';cells[0,2]:='代码:';
	 cells[0,3]:='价格:';cells[0,4]:='成交量:';cells[0,5]:='成交金额:';
	 Cells[2,0]:='补分时事件';Cells[2,1]:='信息包数';Cells[2,3]:='有效包数';
   end;
 with hisGrid do
   begin
	 colcount:=3;rowcount:=11;
	 cells[0,0]:='代码';cells[0,1]:='市场';cells[0,2]:='日期';
	 cells[0,3]:='开盘';cells[0,4]:='最高';cells[0,5]:='最低';
	 cells[0,6]:='收盘';cells[0,7]:='成交量';cells[0,8]:='成交金额';
	 cells[0,9]:='涨';cells[0,10]:='跌';
	 Cells[2,0]:='补日线事件';Cells[2,1]:='信息包数';Cells[2,3]:='有效包数';
   end;
end;

procedure TStock1Form.Rece;
begin
  //动态建立组件
  stock1:=Tstockdriver.Create(Self) ;
  try
	 with stock1 do
	  begin
		stock1.Parent:=self;
		stock1.hide; //隐藏
		Left:=0;
		Top:=0;
		Width:=350;
		Height:=250;
		OnBaseFile:=Stock1BaseFile;//基本资料事件
		OnNewsFile:=Stock1NewsFile; //公告新闻事件
		(DefaultInterface as istockdriver2).EnableNewFormat:=1; //新格式驱动
	  end;
  except
	err:=err+1;
	stock1.Free;
  end;
  Stock1Rep:=Tstockreport.Create(self);
  try
	stock1.OnReport:=Stock1report;//行情接收事件
	Stock1Rep2I:=stock1rep.DefaultInterface as istockreport2;//启用新的接收格式接口
  except
	err:=err+1;
	Stock1Rep.Free;
  end;
  Stock1Min:=TStockMinData.Create(self);
  try
	stock1.OnMinData:=Stock1MinData; //补分时事件
  except
	err:=err+1;
	Stock1Min.Free;
  end;
	Stock1His:=TStockHisData.Create(self);  //补日线数据对象
  try
	stock1.OnHistory:=Stock1History; //补日线数据事件
  except
	err:=err+1;
	stock1his.Free;
  end;
  if err=0 //
  then begin if stock1.ReceiveEx=1
			 then  begin
				 memo1.Clear;
				 memo1.Lines.Append('当前的频道,电视台和信道误码率:'+stock1.Channel);
				 memo1.Lines.Append('驱动程序 ID 字符串:'+stock1.Provider);
				 memo1.Lines.Append('信息卡卡号:'+stock1.RcvIDCode);
				 memo1.Lines.Append('驱动程序版本号和编译号:'+stock1.version);
				   end
			 else showmessage('不能接收');
		BtnSetup.Enabled:=True;
	   end
  else begin
	   BtnSetup.Enabled:=False;
	   ShowMessage('不能建立组件或对象,错误码:'+inttostr(err));
   end;
  BtnReceive.Caption:='关闭接收系统';
end;

procedure TStock1Form.stop;
begin
  Stock1.Stop;
  BtnSetup.Enabled:=False;
  stock1His.Free;
  stock1min.Free;
  stock1rep.Free;
  stock1.Free;
  BtnReceive.Caption:='启动接收系统';
end;

procedure TStock1Form.Button1Click(Sender: TObject);
var ab:TaboutBox;
begin
	ab:=Taboutbox.Create(self);
	ab.ShowModal;

end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -