说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB应用程序中打印条形码的两种方法

HTML文档下载 WORD文档下载 PDF文档下载
VB应用程序中打印条形码的两种方法
(作者:四川 李佑民 )


  条形码作为一种机器可识别的图形,它能快速、准确地标识某种产品或商品,在许多数据库应用中起作很重要的作用,如超市收银、车站售票等场合。当某件物品上带有的条形码被条码扫描器正确解读后,将会得到该物品的唯一标识字符串,通过检索数据库我们就可以很容易知道它的一些其它属性并作相应处理。虽然在Internet上能找到许多免费和不免费的条形码打印控件,但是这些控件除了使用不方便外,还有一个最大的缺点:它们的打印输出不能和我们的程序共存在一个打印页面上,比如说在一个过程中,我们先向系统 Printer 中输出一些内容,然后再调用控件的条形码打印方法,最后打印的结果为两页!,如果现在我们要处理一张车票,上面不仅要打印条形码,还要有终点站和票价等信息,那么控件就变得不可用。对程序员来说,可能还是希望能了解条形码打印的原理,本文提出两种打印方法与同行们探讨。



一、直接利用有条形码打印功能的打印机

  有许多打印机能够直接打印条形码,但在 VB 中,我们在DOS时代熟悉的LPRINT语句已经不能再使用了,打印操作被Windows的Spool系统完全接管,输出是以“页”为单位,所有的打印输出都被Windows转换为图形发送给打印驱动程序。而要使打印机打印条形码就必须将对应的ESC序列直接发送给它,因此我们就要想办法避开Windows的Spool系统,也就是说再程序中不能使用Printer对象和Printers集合处理打印输出,在VB中要将ESC指令直接发送给打印机至少有三种方法,前两种方法是调用Windows API 函数:Escape()和SpoolFile(),第三种是最容易的方法:打开打印机端口进行二进制存取,我们主要考虑这种方法。

  即使在Windows时代,”LPT1:”和”PRN”仍然是可用的,下面我们先作一个试验:打开一个DOS窗口,在提示符下输入COPY CON LPT1:回车,然后随便输入一些字符,最后按F6键,打印机就开始工作了,它将打印出你输入的那些字符!下面的代码演示了直接将指令和字符发送给打印机:

Private Sub Command1_Click()

  Dim strOut As String

  StrOut = “这是直接发送到打印机端口的字符串”

  ‘ 打开打印机端口,其中的”LPT1:”可能需要根据你的打印机设置而改变

  Open “LPT1:” For Binary Access Write As #1

  ‘ 发送给打印机,注意语句的最后一个参数必须是变量

    Put #1, ,strOut

    ‘ 关闭打印机端口

    Close #1

End Sub

  各种打印机打印条形码的指令可能不同,比如将上面的变量 strOut赋值为:

  strOut = Chr(28) & “P” & Chr(5) & Chr(2) & Chr(3) & Chr(3) & Chr(6) & “012345”

  将在 AR2400 打印机上打印出内容为”012345”的 CODE39 格式的条形码。具体的打印控制指令请参考打印机手册。

  用这种方法的缺点:一是过份依赖打印机本身,而有条形码打印功能的打印机通常要比普通打印机昂贵,这会使构造应用系统不够经济;二是所有的打印输出都必须你自己处理,比如打印定位就很浪费时间。



二、利用画图方式输出到普通打印机

  条形码的编码规则不外乎是通过线条和线条间间隙的宽窄不同来表示二进制的1和0,只要我们了解了条形码的编码规则,完全可以用画图的方式在普通打印机上得到可以接受的效果。下面我们就使用最普遍的CODE39码进行讨论。

  CODE39码的编码规则是:

1、 每五条线表示一个字符;

2、 粗线表示1,细线表示0;

3、 线条间的间隙宽的表示1,窄的表示0;

4、 五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;

5、 条形码的首尾各一个*标识开始和结束

  在我们的程序中,给常用的字符都进行编码,解读时先取线条粗细,再取间隙宽窄,如:



  上图中的字符*就可以解读为 001101000,字符3解读为 110000100

  下面就是我们给出的子过程:

注释: 将字符串 strBarCode 对应的条形码输出到缺省打印机

Private Sub PrintBarCode( _

  ByVal strBarCode As String, _

  Optional ByVal intXPos As Integer = 0, _

  Optional ByVal intYPos As Integer = 0, _

  Optional ByVal intPrintHeight As Integer = 10, _

  Optional ByVal bolPrintText As Boolean = True _

)

注释: 参数说明:

注释: strBarCode    - 要打印的条形码字符串

注释: intXPos, intYPos - 打印条形码的左上角坐标(缺省为(0,0),坐标刻度为:毫米)

注释: intHeight     - 打印高度(缺省为一厘米,坐标刻度为:毫米)

注释: bolPrintText   - 是否打印人工识别字符(缺省为true)



注释: "0"-"9","A-Z","-","%","$"和"*" 的条码编码格式,总共 40 个字符

Static strBarTable(39) As String

注释: 初始化条码编码格式表

  strBarTable(0) = "001100100"   注释: 0

  strBarTable(1) = "100010100"   注释: 1

  strBarTable(2) = "010010100"   注释: 2

  strBarTable(3) = "110000100"   注释: 3

  strBarTable(4) = "001010100"   注释: 4

  strBarTable(5) = "101000100"   注释: 5

  strBarTable(6) = "011000100"   注释: 6

  strBarTable(7) = "000110100"   注释: 7

  strBarTable(8) = "100100100"   注释: 8

  strBarTable(9) = "010100100"   注释: 9

  strBarTable(10) = "100010010"  注释: A

  strBarTable(11) = "010010010"  注释: B

  strBarTable(12) = "110000010"  注释: C

  strBarTable(13) = "001010010"  注释: D

  strBarTable(14) = "101000010"  注释: E

  strBarTable(15) = "011000010"  注释: F

  strBarTable(16) = "000110010"  注释: G

  strBarTable(17) = "100100010"  注释: H

  strBarTable(18) = "010100010"  注释: I

  strBarTable(19) = "001100010"  注释: J

  strBarTable(20) = "100010001"  注释: K

  strBarTable(21) = "010010001"  注释: L

  strBarTable(22) = "110000001"  注释: M

  strBarTable(23) = "001010001"  注释: N

  strBarTable(24) = "101000001"  注释: O

  strBarTable(25) = "011000001"  注释: P

  strBarTable(26) = "000110001"  注释: Q

  strBarTable(27) = "100100001"  注释: R

  strBarTable(28) = "010100001"  注释: S

  strBarTable(29) = "001100001"  注释: T

  strBarTable(30) = "100011000"  注释: U

  strBarTable(31) = "010011000"  注释: V

  strBarTable(32) = "110001000"  注释: W

  strBarTable(33) = "001011000"  注释: X

  strBarTable(34) = "101001000"  注释: Y

  strBarTable(35) = "011001000"  注释: Z

  strBarTable(36) = "000111000"  注释: -

  strBarTable(37) = "100101000"  注释: %

  strBarTable(38) = "010101000"  注释: $

  strBarTable(39) = "001101000"  注释: *



  If strBarCode = "" Then Exit Sub 注释: 不打印空串



  注释: 保存打印机 ScaleMode

  Dim intOldScaleMode As ScaleModeConstants

  intOldScaleMode = Printer.ScaleMode

  注释: 保存打印机 DrawWidth

  Dim intOldDrawWidth As Integer

  intOldDrawWidth = Printer.DrawWidth

  注释: 保存打印机 Font

  Dim fntOldFont As StdFont

  Set fntOldFont = Printer.Font

  

  Printer.ScaleMode = vbTwips 注释: 设置打印用的坐标刻度为缇(twip=1)

  Printer.DrawWidth = 1   注释: 线宽为 1

  Printer.FontName = "宋体" 注释: 打印在条码下方字符的字体和大小

  Printer.FontSize = 10

  

  Dim strBC As String     注释: 要打印的条码字符串

  strBC = Ucase(strBarCode)

  注释: 将以毫米表示的 X 坐标转换为以缇表示

  Dim x As Integer

  x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips)

  注释: 将以毫米表示的 Y 坐标转换为以缇表示

  Dim y As Integer

  y = Printer.ScaleY(intYPos, vbMillimeters, vbTwips)

  注释: 将以毫米表示的高度转换为以缇表示

  Dim intHeight As Integer

  intHeight = Printer.ScaleY(intPrintHeight, vbMillimeters, vbTwips)

  

  注释: 是否在条形码下方打印人工识别字符

  If bolPrintText = True Then

    注释: 条码打印高度要减去下面的字符显示高度

    intHeight = intHeight - Printer.TextHeight(strBC)

  End If

  

  Const intWidthCU As Integer = 30 注释: 粗线和宽间隙宽度

  Const intWidthXI As Integer = 10 注释: 细线和窄间隙宽度

  Dim intIndex As Integer      注释: 当前处理的字符串索引

  Dim i As Integer, j As Integer, k As Integer  注释: 循环控制变量



  注释: 添加起始字符

  If Left(strBC, 1) <> "*" Then

    strBC = "*" & strBC

  End If

  注释: 添加结束字符

  If Right(strBC, 1) <> "*" Then

    strBC = strBC & "*"

  End If

  

  注释: 循环处理每个要显示的条码字符

  For i = 1 To Len(strBC)

    注释: 确定当前字符在 strBarTable 中的索引

    Select Case Mid(strBC, i, 1)

    Case "*"

      intIndex = 39

    Case "$"

      intIndex = 38

    Case "%"

      intIndex = 37

    Case "-"

      intIndex = 36

    Case "0" To "9"

      intIndex = CInt(Mid(strBC, i, 1))

    Case "A" To "Z"

      intIndex = Asc(Mid(strBC, i, 1)) - Asc("A") + 10

    Case Else

      MsgBox "要打印的条形码字符串中包含无效字符!当前版本只支持字符 注释:0注释:-注释:9注释:,注释:A注释:-注释:Z注释:,注释:-注释:,注释:%注释:,注释:$注释:和注释:*注释:"

    End Select

    

    注释: 是否在条形码下方打印人工识别字符

    If bolPrintText = True Then

      Printer.CurrentX = x

      Printer.CurrentY = y + intHeight

      Printer.Print Mid(strBC, i, 1)

    End If



    For j = 1 To 5

      注释: 画细线

      If Mid(strBarTable(intIndex), j, 1) = "0" Then

        For k = 0 To intWidthXI - 1

          Printer.Line (x + k, y)-Step(0, intHeight)

        Next k

        x = x + intWidthXI

      注释: 画宽线

      Else

        For k = 0 To intWidthCU - 1

          Printer.Line (x + k, y)-Step(0, intHeight)

        Next k

        x = x + intWidthCU

      End If



      注释: 每个字符条码之间为窄间隙

      If j = 5 Then

        x = x + intWidthXI * 3

        Exit For

      End If

      

      注释: 窄间隙

      If Mid(strBarTable(intIndex), j + 5, 1) = "0" Then

        x = x + intWidthXI * 3

      注释: 宽间隙

      Else

        x = x + intWidthCU * 2

      End If

    Next j

  Next i



  注释: 恢复打印机 ScaleMode

  Printer.ScaleMode = intOldScaleMode

  注释: 恢复打印机 DrawWidth

  Printer.DrawWidth = intOldDrawWidth

  注释: 恢复打印机 Font

  Set Printer.Font = fntOldFont

End Sub



  最理想的情况是将它做成一个控件,在控件中提供一个打印方法,该方法实现与上

  那个过程大致相同,只是不能在控件中直接使用VB的Printer对象,否则VB会将你在控件中的打印输出处理为一个单独的页面,而是应该将Printer.hDc传给它,通过调用那些需要指定 HDC 的Windows API函数实现与容器的打印输出在一个页面上,比如我们可以这样定义这个控件的打印方法:

注释: PrintIt 方法将对应的条形码输出到缺省打印机

Public Sub PrintIt(ByVal PrintDC As Long, _

   Optional ByVal intXPos As Integer = 0, _

  Optional ByVal intYPos As Integer = 0, _

   Optional ByVal intPrintHeight As Integer = 10)

  既然不能使用Printer对象,那么画线和输出文字也不能使用Printer对象的Line和Print方法,在我们的程序中至少要申明以下三个Windows API函数:

‘ 移动画笔的位置

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long

‘ 从画笔的当前位置到(x,y)画一条线

Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

‘ 在(x,y)处输出一个字符串

Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

‘ MoveToEx() 函数需要的参数

Private Type POINTAPI

  xp As Long

  yp As Long

End Type

Dim papi As POINTAPI

  画线操作为(原来的Printer.Line函数):

MoveToEx PrintDC, x + k, y, papi

LineTo PrintDC, x + k, y + intHeight + 1

  打印字符为(原来的Printer.Print函数):

TextOut PrintDC, x, y + intHeight, Mid(strBC, i + 1, 1), 1
经典电影里的数学 15亿美元!软银联合GungHo收购手游巨头Supercell Oracle“炮轰”开源:称其永远无法在军事领域取得一席之地 零客户端:下一代计算分布模型 苹果聘奢侈品公司巴宝莉CEO Angela Ahrendts为零售主管 看看你会几个?9大最火的移动开发技能 为了进一步拴住用户:传亚马逊与HTC合作开发智能手机 三年?又三年!今年MDCC2013大不相同! 杨远骋:聚美优品与百度云推送的故事 糗事百科王坚:百度云推送让我们省心 10个最热JavaScript开源框架的社区活跃度对比 2013福布斯中国富豪榜:李彦宏第三、马化腾第五、马云第八 Storm又获东风,Hortonworks计划将其整合到Hadoop企业版 IBM CEO:预测高新技术 五个我最喜欢的方式 我伙呆,硅谷高级工程师年薪16.5万美金起 羡煞旁人的Supercell:Clash of Clans卫冕营收榜冠军 谷歌第三财季利润增36.5% 但摩托罗拉业务继续亏损2.48亿 针对应用开发者的几点建议:注意特征蔓延、加大用户评审…… Ubuntu中文衍生版UbuntuKylin 13.10正式发布 Web设计师和Web开发者之间的区别是什么? 在政府退出后,Google的量子计算机项目面临危机 SQL on Hadoop的最新进展及7项相关技术分享 联想:欲收购黑莓,还能在智能手机领域创造PC神话吗? 谁说Android开发者的收入依然不行? 代码可维护性的神秘面纱 MDCC 2013首批演讲嘉宾名单出炉 议题即将披露 MDCC2013:公开征集讲师和演讲主题 移动周报:IT人必看!9大最火移动开发技能 OpenStack H版发布 盘点2013:21个最火的云初创公司 从摩尔定律到原子计算,2013诺贝尔物理学奖背后的计算机技术 紧急求救!!!! 谁有delphi关于ado编程 的资料啊(要详细一点的) TreeView的问题,很实在的问题。 关于在PB上实现错误事件处理!!! 关于组件的停靠 用VB.NET连接数据库老是连不了,快精神分裂了,救命啊! 关于SendMessage(高分相送,紧急) 急!!!高手进! 在查找结果中如果某一字段的值相等,只取出其中一条的问题! squid的安装问题???????????????????? SQL语句问题? 冒昧求救,光驱不能使用,不能boot 我的主机总收到外面发的广告信息? 高分求助急!!! 见鬼了,我添加一个TServerSocket控件,然后编译出现:Declaration terminate incorrectly 有谁知道用哪款打印机比较好呢? 按钮BitBtn1上有图片,在图片上写字的问题。(在先给分!) cystal reports 8.5 english显示繁体问题,急,等待 Unix下用什么源代码检测工具比较好? 我的电脑出什么问题了?各位帮帮忙 界面导航如何分类? 怎样得到本机的网卡号??? %¥#问个小问题,知道的都来抢分啊 谁知道哪儿有支持认证的SMTP组件下载? 有什么软件能查看PE文件的? ADO问题!!!! 100分求购最简单的串口程序!需要详细注释! 怎么给大家份呀?to wyz_csdn等(500分诚征wav 转换到MP3的源程序(VC++的例子)) 在directshow中,不知道怎样对播放的画面的亮度进行控制? 如果深愛的人要離開你,是變心還是死亡好一點?(讨论) 贴了二次为什么没有人指教? 戒水快两年了,如今回来看看,物不是人非啦 新手一问 关于datagrid 修改数据的问题,帮我看看,多谢 谁有这两本书,请帮忙发到我的邮箱里,100分相送 到底应该怎么办? 大家好,如何打开DLL文件? 建议成立一个程序员协会 关于IE中图片的保存 VB 语言支持问题 高分求李维《delphi5.xDELPHI5.X ADO/MTS/COM+高级程序设计》示例源码!!!! 请yangshu进来!给妳点分!!!倒分! 请教各位如何实现dbgrid中按住shift多选的问题? 请问把sql-server7中的数据文件copy出来行吗? 找不到类,请大家帮忙解决,谢谢 异常处理问题 怎样恢复被损坏的"本地用户和组" 小弟在线等待,一小问题,,大家来帮忙?? 求jsp树的原代码 最好是jsp+js+xml 执行效率要高。(从数据库中动态生成的)在线 关于多层结构中事务处理的问题. VB6.0升级到VB.NET的问题。 脲甲醛化肥包括那几种元素 二氧化碳不从毛细血管进入肝细胞的原因 傅雷在第一封信中对儿子寄予了怎样的期望 史贝美脲甲醛肥料工艺特点有哪些? 同种物质的分子性质相同,不同种物质的分子性质不同 这句话对吗 了解傅雷这封家书是在什么情况下写给儿子的.2,傅雷想通过这封书信告诉儿子什么 把一根长13厘米的铁丝做成一个腰长为5厘米的等腰三角形,它的底边长多少厘米? 同种物质的分子性质相同,不同物质的分子性质不同.这句话对吗 傅雷在这封信中对儿子寄予了怎样的期望' 用一根20厘米的铁丝围一个等腰三角形,这个等腰三角形的腰长可能是多少厘米? 同种物质的分子性质相同、不同种物质的分子性质不同、这种说法对吗、为什么、 傅雷先生的信写给哪个儿子《傅雷家书》 如何利用化学镀在铁机体上镀上金刚石 同种物质的分子性质相同,不同种物质的分子性质不同判断对错,不要太深 联合国吧世界上的国家分为两大类一是.2是.中国属于哪一类 请问哪里有免费下载环保型长效化肥聚脲甲醛的合成研究 “同种物质的分子性质相同,不同种物质的分子性质不同”这句话正确吗?为什么?这是初三化学书的习题 文言文中“为所结构” 除表被动,意思是? 甲袋大米二十五千克七十五元,乙袋大米四十千克八十元算一算哪种大米便宜些 "同寝,中夜闻鸡鸣"包括怎样的成语 联合国把世界上的国家大致分为两大类,一是什么,二是什么.我们中国属于什么 现在哪里的大米最便宜 为什么二氧化碳不能穿过毛细血管? θ=arctan(4/3)=53.13° 怎么算出53.13°的 大米能便宜点吗? co2不从毛细血管进入胰腺组织细胞的原因是?答案说co2不从毛细血管进入胰腺组织细胞的原因是胰腺产生co2,且浓度高.胰腺怎么会产生co2,为什么要产生co2?毛细血管不就是淋巴吗?最好不都是要 世界有几个字 已知S-Cl,Si-Si,H-H,H-Cl键能分别为:360.176,436,431千焦每摩尔SiCl4(g)+2H2(g)==Si(s)+4HCl(g)反应该反应的反应热是多少?答案是△H=+236KJ/mol 用酚酞作指示剂 用酚酞作指示剂 盐酸滴定Na2co3 达到滴定终点 离子浓度关系为什么达到滴定终点时恰好完全反应生成NaHco3和Nacl? 谁能给我看一个世界上笔画最多的字? ipod Apple ID怎么弄? 工业上制备纯硅反应的热化学方程式如下:SiCl4(g)+2H2(g)⇌Si(s)+4HCl(g);△H=+QK工业上制备纯硅反应的热化学方程式如下:SiCl4(g)+2H2(g)⇌Si(s)+4HCl(g);△H=+QKJ/mol(Q> 古文中的“以”翻译成“把”表什么?比较翻译成“用”表方式.比如 脲醛胶配方我爸爸最近转行到刨花板制作行业.但他对制作刨花板所必须的脲醛胶不太了解,请问有谁能帮帮他吗?尤其是关于配方上!感激不尽! 肺泡有与外界空气进行气体交换那是不是只是一个扩散作用,请看一下这道题:人体细胞要获得氧气,排出二氧化碳,必须经过如下①②③等过程来完成 外界空气→ 肺泡→ 血液→ 组织细胞 工业制备纯硅的反应为SiCl4(g)+2H2(g)=Si(s)+4HCl(g);△H=+240.4J/mol,生成的HCl 通入100ml/mol 的NaOH溶液恰好反应,则反应过程中( )(填吸收或释放)的热量为( )kj.需要两空的详解哦,不求多,但要易 两根铁丝共长636米,各减去三米,则第一根的长度是第二根剩下长度的9/8倍,原来两根铁丝共长多少米两根铁丝共长363米,各剪去三米,则第一根的长度是第二根剩下长度的9/8倍,原来两根铁丝 (1)组织内的气体交换和肺泡内的气体交换是通过___________来实现的.请说明理由谢谢(2)根据气体分压值的变化,可以判断甲图中的血流方向是___________,乙图中的血流方向是__________。(3 液化气热水器在用个几分钟后为什么火会熄灭后马上又自动点燃,并如此重复,是怎么回事? 0.35的倒数是多少分数 皓尔宝能分解甲醛吗 找一个成语含有寝 睡觉( ) 0.35的倒数是什么? 带有“寝”的成语 7、8、9、10、11 a和b(a不等于0,b不等于0)是互为倒数的是:1,a除以b 2,a=b 3,1除以a=b 4,a除以1=b "祖逖北伐"中的成语?所有的 足量钠钠与盐酸反应中,先与酸反应还是先与水反应,化学方程式怎么写,写两个还是合在一起写,什么样的两个方程式可以合在一起,最好举个例子, 食品能分成几大类用尽量少的字概括,【分成尽量少的几大类,】 谁有Apple ID 由古文《孙权劝学》引出的成语是什么?一定要准确无误! 一到初一的饮食分解x^2(2x-1)^2+(1-2x)^3因式分解 谁可以借我apple ID啊 孙权劝学和祖逖北伐中的成语 食物中的淀粉最初被分解的部位是... CO2 不从毛细血管进入胰腺组织细胞的原因是? Arctan的反运算怎么算不用科学计算器 口算 比如arctan1=45‘ 那arctan6.441=多少度 请问电容器引出金属端子镀什么金属好?为什么?最近要采购电容供应商告诉我们镀锡的好,但是我们想要镀镍 CO2会不会从毛细血管进入胰腺组织细胞,为什么? arctan(-1)=-π/4,怎么算的? 中国少数民族歌舞走进巴西安邻兴伟业 善邻谋致远——中国安邻外韩国电影节女星清凉上阵拼性感(组图)美一涂鸦街区将拆迁 艺术家联名告开发2013年是“男”还是“女”?斯诺登将在俄“遥助”德国 作证“监听加拿大暴风雨30多万人受影响网友自制“2014节假日放假表” 比专家:中国九成以上大豆油是转基因产品委总统微博掉粉 谴责国际右翼势力插手汤加发生6.4级地震房租过高 白领伦敦上班巴塞罗那居住坐韩国口罩销售量激增 韩媒曾为中国雾霾克里无奈承认:有些监听活动太过头日海陆空“夺岛演习”规模空前 自卫队外媒称美国驻德国大使馆系间谍中心 可中央第二轮巡视10个巡视组全部进驻被法民众抗议“生态税” 与防暴警对峙【证监会:提高中小股东话语权 建立背信国外球星逃税手段多样 “土豪”大战“永康一辆槽罐车倒扣在宝马上 车上母子12星座中的爱情绝配蒋介石家历代媳妇:个个倾城绝色“醉”不容“赦” 帮你算算“醉驾”成名家专栏:没风洞设计鸭翼?融合双垂还万亿银行债转股能否成为a股发动机?宋打好组合拳助圆小康梦金寨创新方式引领经济学家宋清辉:破解房价收入倒挂须靠799元魅蓝note3的完美看白永祥中国“实践十号”卫星成功飞天:首颗微俄媒:俄开辟西伯利亚“茶叶之路”吸引加拿大华人推高住房需求 中国开发商拓质疑美国保护承诺!美报告称韩国考虑研有它在就没有战友受伤!美国军犬获军功在美中国留学生终极选择:美国就业后再美洲狮闯居民区 两只家犬围住狂吠媒体揭女子遇袭酒店:闲人出入自由 充标题导航标题导航标题导航标题导航墨西哥实施“史上最严”限行措施
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘