[返回]
中国计算机报2001年第5期

趣味编程迎新春

安富国

  放假了,过年了,你是不是也要好好放松一下?这里为爱好编程的读者准备了几个有趣的程序实例,想看看运行效果吗?那就赶紧去试试吧!


  实例之一:给任意窗口开个洞


  读到这个标题是不是感到很恐怖?的确,我们利用一段简单的代码就可以使我们的资源管理器产生一个很大的“漏洞”(如图1)。以下是它的实现方法。

  运行Delphi并新建一个工程(Application),在Form1上放置一个Button按钮,双击它进入事件处理程序段,输入以下代码:

  procedure TForm1.Button1Click(Sender: TObject);

  const

   TitleName='我的文档';

  var

   HWnd : integer;

   Region1, Region2 : hRgn;

   a : TRect;

  begin

   HWnd:=FindWindow(nil, TitleName);

   GetWindowRect(Hwnd,a);

   Region1 := CreateRectRgn(0, 0, a.right - a.left, a.bottom - a.top);

   Region2 := CreateEllipticRgn(20 , 20, 200, 200);

   CombineRgn(Region1,Region1,Region2,RGN_DIFF);

   SetWindowRgn(HWnd, Region1, True );

  end;

  TitleName是要遭殃的窗口名字,这里是“我的文档”。CombineRgn()和SetWindowRgn()函数都是设置窗体形状最常用的方法,具体解释请见Delphi的帮助文档。运行该程序前请打开“我的文档”,保证当前有一个同名窗口存在,不然没有效果。

  在上例的基础上稍加修改,我们还可以写出更有趣的小程序。现在,你只要把上面程序的第一行代码换成下面的语句

  HWnd:=GetActiveWindow;

  编译并运行该程序,看看效果吧!

  注意,该程序只可在Windows 2000操作系统下运行。


  实例之二:特别的祝福给特别的你


  新建一个工程,在主窗体Form1上放一个Label1,Form1和Label1的属性做如下改变:

  Form1.Position= poDesktopCenter

  Form1.BorderStyle=bsNone

  Label1.Caption='过年好!'

  Label1.TransParent=true

  注意TransParent一定要设置为true。

  接着为Label1设置好字体、字号和颜色。最后,输入下面的代码:

  procedure TForm1.FormCreate(Sender: TObject);

  var

   FormRgn:hrgn;

  begin

   Brush.Style:=bsClear;

   with Label1 do

   FormRgn:=CreateRectRgn(Left,Top,Left+Width,Top+Height);

   SetWindowRgn(Handle, FormRgn, true);

  end;

  procedure TForm1.Label1Click(Sender: TObject);

  begin

   Close;

  end;

  运行结果如图2。

  请注意,屏幕上显示的可不是操作系统界面,而是正经八百的窗体。把它当做贺卡发给朋友,感觉是不是很酷?

  当然,这个程序还有许多可以改进的地方,比如我们可以给它加上背景音乐。设计的简单步骤如下:在Form1上放置一个Media- Player控件,Visible属性设为false,即控件不可视。在FormCreate事件的最后加上如下代码:

   with MediaPlayer1 do

   begin

   FileName:='甜蜜蜜.mid';

  // 播放的多媒体文件名,也可以是.WAV文件或其它

   Open;

   Play;

   end;

  FileName指定的文件“甜蜜蜜.mid”最好和运行程序放在同一文件夹下,发布程序时别忘了带上它一起打包,否则要出错呦!