第37章
作者:佚名    更新:2021-12-03 10:35
  这一功能可以用 VB 本身带有的 SavePicture 语句来完成。
  SavePicture语句将窗体、图象控件或图片框中的图形图象保存到磁盘上的一个文件中,这些图象可以是使用画图方法(Line,Circle,Pset)产生出来的,也可以存储那些通过设置窗体或图片框的图片属性或者通过PaintPicture 方法或 Load Picture 函数载入的图象。这些载入的图象可以是 BMP、ICO 或 WMF 图形文件。
  SavePicture 语句的语法格式如下:
  SavePicture picture,stringexpression
  参数 picture 为窗体或图片框的 picture 或 image 属性;参数 strngexpression 为保存的文件名。
  下面举一个具体的程序来说明定制图象文件的过程:
  1、创建一个新的项目文件,在 Forml 中加入一个图象控件 Picture1,将Picture1 的 AutoRedraw 属性设置为 True;
  2、在Form_Load() 事件中,加入如下代码:
  Private Sub Form-Load()
  Dim CX As Integer
  Dim CY As Integer
  Dim Limit As Integer
  Dim Radius As Integer
  CX=1000
  CY=1000
  For Radius=0 To Limit
  Picturel.Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255)
  Next Radius
  SavePicture Picturel.Image,"c:\custom.bmp"
  End Sub
  执行此程序就会把图片框 Picture1 上的图象保存在 C: 盘根目录下 custom.bmp 图象文件中。
  最后有两点需要指出:
  1、在使用 SavePicture 语句之前,必须先将窗体或图片框的 AutoRedraw 属性设为 True,否则保留的将是一张空图;
  2、使用 Image 属性保存的用画图命令(如 Line,Cirele,Pset 或 Print)画出来的图形总是以 BMP 文件格式保存。但在程序设计时如果使用窗体或图片框的 Picture 属性载入或在程序运行时通过 LoadPicture 函数载入的图象,使用 SavePicture 语句存储时,存储的文件格式同其载入前的文件格式一样(如 ICO 格式等)。
  102,Q:在 Visual Basic 中如何拖动窗体或控件?
  A:现在的许多 windows 下的应用程序,都采用了图形化的界面,但是在这样的界面下就不能使用 Windows 原来的标题条了,否则会影响界面的美观。那么在没有标题条的情况下如何用鼠标拖动窗体或者其它的控件呢?
  其实,采用 API 函数调用很容易实现,下面我们以拖动窗体 Form1 为例来具体讲一下实现方法:
  1、新建立一个项目,名称为 test.vbp;
  2、填加一个模块,名称为 test.bas,并且在声明部分加入以下代码:
  Declare Function ReleaseCapture Lib "user32" () As Long
  Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal  wParam As Long, lParam As Any) As Long
  Public Const WM_SYSCOMMAND = &H112
  Public Const SC_MOVE = &HF012
  其中 ReleaseCapture 函数是用来释放鼠标捕获的,SendMessage 函数是一个在 Windows API 中非常重要的函数,在这里的作用是用来向 Windows 发送移动窗体的消息。WM_SYSCOMMAND 是向 Windows 发送消息的常量。SC_MOVE 是控制移动窗体的常量。请注意:这里 SC_MOVE 的赋值是 &HF012,表示鼠标对象。
  3、在窗体的 MouseDown 过程中加入以下代码:
  Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  ReleaseCapture
  SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
  End Sub
  其中 ReleaseCapture 函数用来释放鼠标捕获,SendMessage 函数向 Windows 发送移动窗体的消息。
  4、保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。
  以上讲述了如何在 VB 中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。例如以下代码可以实现图片框的拖动:
  ReleaseCapture
  SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
  (注:以上程序在 Windows98、VB5.0/6.0 下调试通过。在 NT4.0、VB6.0 下不能运行。)
  103,Q:用 Delphi5.0 编程实现 Windows 桌面的隐藏和显示
  A:实现原理是调用 Windows 的 API 函数。程序代码如下:
  procedure TForm1.Button1Click(Sender: TObject);
  var hDesktop:Thandle;
  begin
  hDesktop:=FindWindow('Progman',nil);
  ShowWindow(hDesktop,SW_HIDE); //隐藏桌面
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  var hDesktop:Thandle;
  begin
  hDesktop:=FindWindow('Progman',nil);
  ShowWindow(hDesktop,SW_SHOW); //显示桌面
  end;
  procedure TForm1.Button3Click(Sender: TObject);
  begin
  close;
  end
  104,Q:应用 Microsoft TTS 语音引擎的 Delphi 语言实例
  A:建立一个单窗体工程,添加一个 Edit 和 2 个 Button 控件,分别命名为 Edit1、btnSpeak、btnStop。