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

📄 9931.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
  Do While Sum < LF& 
  If LF& - Loc(hSend) < BSIZE Then 
  BSIZE = LF& - Loc(hSend) 
  ReDim SENDARR(1 To BSIZE) 
  End If 
  Get hSend, , SENDARR '从文件取字节放入字节数组 
  SENDVAR = SENDARR '转放到 Variant型变量 
  '当CTS线及CD线为高电平时才可发送,否则需等待。 
  T = Timer + 60 
  L: 
  If MSComm1.CTSHolding And MSComm1.CDHolding Then 
  MSComm1.Output = SENDVAR '发送 
  Sum = Sum + BSIZE '累加计数 
  Label6.Caption = Str(Sum) '显示在发送窗口上 
  Else 
  If Timer < T Then 
  GoTo L '循环等待 
  Else 
  GoTo CLOSEFILE '等待时间超过 60秒则退出 
  End If 
  End If 
  '等待系统处理完 
  Do 
  RET = DoEvents() 
  Loop Until MSComm1.OutBufferCount = 0 
  Loop '循环语句结尾 

  ----文件发送完毕以后,关闭该文件。并关闭发送文件信息窗口。 

  八 接收MODEM回送的信息及接收文件 

  ---- (一)设计要点:我们是如下进行设计的。 

  1.在主窗口上设一个多行显示的文本框,用来显示接收到的所有文本类
型信息。 

  2.建立<收件箱>。实际上是一个数据库中的一个表.包含收件日期,文
件名,文件长度,序号等字段。 

  3.利用事件触发机制来执行接收数据的过程。即编写mscomm1控件的
OnCOMM事件的处理程序。 

  4.按以下方法来改变输入模式属性(InputMode)的值:通常使InputMode
属性为文本模式。当发现接收到的字符串中有"FILESTAR" + Chr(5) + Chr(13) 
+Chr(10),按本软件规定表示传送的文件内容将开始,则将InputMode属性改为
二进制模式。当文件内容接收完(由接收的字节数判断)再将InputMode属性
改为文本模式。 

  5.利用本软件设计的标志字符串(见七)来控制进程,在发送及接收程序
中均使用。 

  ---- (二) MSCOMM1控件的OnCOMM事件的的处理程序 

  Private Static Sub MSComm1_OnComm()           
  Select Case MSComm1.CommEvent             
  Case comEvReceive                   
  '接收缓冲区收到Rthreshold个字符时触发         
  Dim VARC As Variant                   
  Dim N As Long                     
  Dim SJARR() As Byte                   
  '                           
  N = MSComm1.InBufferCount '接收缓冲区字符总数     
  If MSComm1.InputMode = 0 Then             
  '当输入模式为文本模式时,将收到的数据放到字符串变量。 
  MSComm1.InputLen = 0                   
  VARC = Space(N)                     
  VARC = MSComm1.Input                   
  Else                           
  '当输入模式为二进制模式时,将收到的数据放到字节数组。 
  ReDim SJARR(1 To N)                   
  VARC = ARR                       
  MSComm1.InputLen = N                   
  VARC = MSComm1.Input                   
  End If                         
  ShowDATA TextTerm, N, VARC               
  '调接收数据处理过程Showdata               
  End Select                       
  End Sub                         
                               
  (三)接收数据处理过程 ShowData             
                               
  N AsPublic Static Sub ShowData(Term As Control, _Long, DATA As Variant)   
  '参数:Term (主窗体上的文本框,用于显示接受数据)                   
  ' N 为本次接收到的字节数                               
  ' DATA (接收到的数据.Variant型 )                           
  (变量定义部分:略)                                   
  '(一)非文件传输情形(接收的是字符串)                           
  If not mscomm1.InputMode= 0 Then                           
  GoTo L2                                         
  End If                                         
  '(1)把新接收的字符数据放到文本框TERM末尾                       
  Term.SelStart = Len(Term.Text)                             
  Term.SelLength = 0                                   
  Term.SelText = DATA                                   
  '(2)未找到文件传输开始标志就结束此过程----                       
  W_FILESTAR = InStr(1, Term.Text, S_FILESTAR, 0)                     
  If W_FILESTAR = 0 Then                                 
  Exit Sub                                       
  End If                                         
  '(3)以下为找到文件传输开始标志的情况                         
  '(3-1)找文件名及文件长度                               
  W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)                     
  W_FILELEN = InStr(1, Term.Text, S_FILELEN, 0)                     
  FN = Mid(Term.Text, W_FILENAME + 11, (W_FILELEN                     
  - W_FILENAME - 13))                                   
  ' (3-2)打开接收文件                                   
  hJS = FreeFile                                     
  JSFN = Pathc + "SJFILES" + Trim(Str(NO)) + "_" + FN                 
  Open JSFN For Binary Access Write As hJS                       
  '(3-3)收件箱增加新记录                                 
  W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)                     
  W_FILELEN = InStr(1, Term.Text, S_FILELEN, 0)                     
  FN = Mid(Term.Text, W_FILENAME + 11, (W_FILELEN - 1) -                 
  (W_FILENAME + 11))                                   
  FL = Mid(Term.Text, W_FILELEN + 11, W_FILESTAR                     
  - (W_FILELEN + 10))                                   
  SENDLEN = Val(FL)                                   
  '应收总字节数SENDLEN                                 
  '以下SJRS是已打开的收件箱对应的记录集型变量                       
  SJRS.AddNew '增加一新记录                               
  SJRS!SJRQ = Now '写入收件日期                             
  SJRS!SJFILE = FN '写入收件的文件名                           
  SJRS!SJLEN = Val(FL) '写入收件的长度                         
  SJRS!FILENO = NO '写入收件的序号                           
  '(3-4)显示文件接收窗口                                 
  JSLEN = 0                                       
  TXINPUT.Show                                     
  '(3-5)改变输入模式属性 InputMode为二进制模式                     
  TXRJ.MSComm1.InputMode = comInputModeBinary                       
  '(7)等待几秒,显示 8 7 6 5 4 3 2 1 0                           
  Exit Sub                                       
  '(二)文件传输状态处理------------                           
  L2:                                           
  ReDim JSARR(0 To N - 1)                                 
  JSARR = DATA '将字节流放入字节型数组                         
  '将字节型数组中的数据写入已打开的接收文件                       
  Put hJS, , JSARR                                   
  JSLEN=JSLEN+N '本次已累计收到的字节数                         
  '已收字节数与文件总长相比较                               
  If JSLEN < SENDLEN Then                                 
  Exit Sub                                       
  End If                                         
  '转此为文件传输已结束------                               
  '关闭接收文件                                     
  Close hJS                                       
  '提交收件箱表的新增记录                                 
  SJRS.Update                                       
  '修改文本显示                                     
  W_FILENAME = InStr(1, Term.Text, S_FILENAME, 0)                     
  Term.SelStart = W_FILENAME - 1                             
  Term.SelLength = Len(Term.Text)                             
  Term.SelText = ""                                   
  FL = "文件" + FN + "接收结束" + Chr(13) + Chr(10)                   
  Term.Text = Term.Text & FL                               
  '关闭收件窗口                                     
  Unload TXINPUT                                     
  '改变 InputMode属性为文本模式                             
  TXRJ.MSComm1.InputMode = 0                               
  Exit Sub                                       
  End Sub                                         
  ~~~~~~~~~~~~                                     
                                             
  ----以上以发送和接收文件为例介绍了我们是如何使用VB5.0及MSCOMM
控件来开发自己的的通信软件的。掌握了以上基本技术,就可以稍加改变来
开发自己的各种专用通信软件。例如发送数据库的一条记录,并使接收方把
接收到的数据也放在数据库中。也可以进行数据加密/解密传输等。总之,
学习怎样使用VB5.0及MSCOMM控件来开发自己的的通信软件是十分有用的。 

  ----附注:本软件运行环境 

  ---- 1、硬件环境:CPU为486以上,16MB以上内存。 

  ---- 2、软件环境:WIN95或WIN98或WINDOWS──NT。 

  ---- VISUAL BASIC 5.0 
                     
****************************************************************

                    开发win95屏幕保护预览程序 

                           作者: 包伟

  ----大家都知道windows屏幕保护程序的作用,而且新的屏幕保护程序
越来越漂亮.如果在win95的桌面右键菜单选属性,就弹出显示器设置界面,
有一个标签是设置屏幕保护程序的.  

  ----在该页的画面上,有一个显示器图案,如果你选择win95所带的屏幕
保护程序,这个屏幕保护程序就会在这个小'显示器'上自动运行,你可以直
接看到运行效果.这功能大大方便了屏幕保护程序的选择,这就是win95对屏
幕保护程序的新增接口:预览功能. 

  ----目前大多数新推出的屏幕保护程序都支持这个接口. 

  ----屏幕保护程序从它的诞生那时起,在同一时刻只能运行一个,不能
多个同时运行,然而预览接口的推出,使同时预览多个屏幕保护程序成为可
能,本文将向读者介绍如何用Delphi开发这样一个程序.  

  ----1.屏幕保护预览接口  

  ----屏幕保护预览接口的使用很简单,这是通过传给屏幕保护程序的命
令行参数来实现的,该命令行参数格式为: 

  ----screensaver.exe/p#####  

  ----其中#####为一个有效的窗口句柄的10进制表示. 

  ----这个窗口我们可以称之为预览窗口. 

  ----实际上,支持预览接口的屏幕保护程序将自己的窗口创建为预览窗
口的子窗口来实现预览功能的. 

  ----2.画面布局  

  ----我们这个程序的窗口分为3部分,为倒'品'字形,上左部分列出所有
可用的屏幕保护程序,上右部分列出所有预览的屏幕保护程序,下面当然是
预览窗口了.  

  ----用Delphi实现时,首先在Form里放2个TPanel组件,Panel1对齐方式
为顶部对齐,Panel2为撑满用户区,再在Panel1中放1个TFileListBox组件和
一个TListBox组件,FileListBox1左对齐,ListBox1撑满用户区.  

  ----这样,FileListBox1为屏幕保护列表,ListBox1为预览列表,Panel2
为预览窗口. 

  ----3.列出屏幕保护程序.  

  ----将FileListBox1的Mask属性设为'*.scr',这是屏幕保护程序的扩
展名. 

  ----在FormCreate方法中将FileListBox1.directory设为windows系统
目录GetSystemDirectory; 

  ----4.预览屏幕保护程序.  

  ----在FileListBox1DblClick方法中运行该屏幕保护程序,并将Panel2
的窗口句柄传给它. 

  ----WinExec(pchar(FileListBox1.FileName+'/p'+inttostr(Panel2.handle)),SW_Show); 

  ----运行程序,怎么样?COOL!  

  ----5.增加一些新特性:隐藏/显示/关闭. 

  ---- 增 加2 个 函 数: 用 于 更 新ListBox1.  
    
  function EnumProc(  
  h : HWND ;// handle of child window  
  l : integer// application-defined value  
  ): boolean;stdcall;  
  var buf : array[0..255] of char;  
  begin  
  GetWindowText(h, buf, sizeof(buf)- 1);  
  if iswindowvisible(h) then  
  Form1.ListBox1.items.add  
  (' ' +strpas(buf) + ' : ' + inttostr(h))  
  else  
  Form1.ListBox1.items.add  
  ('-' +strpas(buf) + ' : ' + inttostr(h));  
  Result := true;  
  end;  
    
  procedure TForm1.Fresh1;  
  begin  
  ListBox1.clear;  
  enumChildwindows(Panel2.handle,  
  TFNWndEnumProc(@enumproc), 0);  
  end;  
    
  ----增加一个弹出菜单Popupmenu1, 3个菜单项, 'Show, Hide, Close', 
将ListBox1.popupmemu指向Popupmenu1. 
    
  ----Hide的处理函数是:  
  procedure TForm1.Hide1Click(Sender: TObject); 
  var h : integer;  
  s : string;  
  begin  
  if ListBox1.itemindex = -1 then exit;  
  s := Listbox1.items[ListBox1.itemindex];  
  h := strtoint(copy(s, pos(':', s) + 1, length(s))); 
  ShowWindow(h, SW_HIDE);  
  Fresh1;  
  end;  
  Show的处理函数是:  
  procedure TForm1.Show1Click(Sender: TObject); 
  var h : integer;  
  s : string;  
  begin  
  if ListBox1.itemindex = -1 then exit;  
  s := Listbox1.items[ListBox1.itemindex];  
  h := strtoint(copy(s, pos(':', s) + 1, length(s))); 
  ShowWindow(h, SW_SHOW);  
  Fresh1;  
  end;  
  Close的处理函数是:  
  procedure TForm1.Close1Click(Sender: TObject); 
  var h : integer;  
  s : string;  
  begin  
  if ListBox1.itemindex = -1 then exit;  
  s := Listbox1.items[ListBox1.itemindex];  
  h := strtoint(copy(s, pos(':', s) + 1, length(s))); 

⌨️ 快捷键说明

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